Tem como eu descobrir atraves do meu codigo se o programa esta rodando no gnome ou no kde?
Desculpa a curiosidade, mas pra que gostaria de saber essa informação?
Pelo que eu saiba, você pode usar um desktop KDE e rodar um programa que usa a GTK (Gnome) sem problemas (como é o caso de rodar o Java 5.0 com o “look and feel” GTK), e vice-e-versa.
Então por que é que você precisa saber isso?
Um jeito tosco e trabalhoso seria vc chamar nativamente um “ps -ef” e filtrar.
Tipo “ps -ef | grep /usr/bin/metacity” pega o gerenciador de janelas do gnome. O do KDE é o kwin.
O problema é que a saida não vem limpa, vc teria que fazer um parsing e etc…
Veja se algum desses windowmanagers seta alguma variavel de ambiente que vc possa analisar, como a WINDOWMANAGER – isso não é padrão…
hehe,
na verdade, acontece que o kde e o gnome te um recurso de "agarrar" a janela no canto da tela, e eu estou fazendo um loop que corre com a janela ateh sair da tela, mas o kde e o gnome "prendem" ela no canto e nao deixa ela sumir…
segue o codigo que faz isso…
private class correParaDireita extends java.lang.Thread {
private JDialog theWindow = null;
private int speed = 1;
private boolean finalizada = false;
private int x = 0;
private int width = 0;
public correParaDireita(JDialog theWindow) {
this.theWindow = theWindow;
x = theWindow.getX();
width = Toolkit.getDefaultToolkit().getScreenSize().width;
}
public void run() {
while (x < width) {
x = x + speed;
theWindow.setLocation(x, theWindow.getLocation().y);
speed += 10;
try {
Thread.sleep(10);
} catch (InterruptedException ee) {
ee.printStackTrace();
}
}
theWindow.setLocation(
Toolkit.getDefaultToolkit().getScreenSize().width,
theWindow.getLocation().y);
finalizada = true;
}
public boolean isFinalizada() {
return finalizada;
}
}
Nos outros isso não acontece? no xfce por exemplo… em quais ambientes vc testou?
GNOME = O PROBLEMA OCORRE
KDE = O PROBLEMA OCORRE
FLUXBOX = NAO OCORRE, FUNCIONA 100%
WINDOWS = FUNCIONA 100%
O que tah fazendo dar pau, eh que o kde e o gnome prendem a janela, ateh arrastando com o mouse ela prende… jah nos outros, nah ha este comportamento, dai funciona 100%
gnome
:twisted:
[quote=marcelomartins]gnome
:twisted: [/quote]
???
Já tinha visto isso. Acho que esses gerenciadores fazem isso para evitar os chamados “pop unders” e para que um programa não coloque uma janela onde o usuário não possa alcançar.
Um workaround seria encostar a janela na borda e ir encolhando ela. Estilo mágico atravessando parede. Mas talvez vc tivesse problemas com repaint().
[quote=kemperacc]GNOME = O PROBLEMA OCORRE
KDE = O PROBLEMA OCORRE
FLUXBOX = NAO OCORRE, FUNCIONA 100%
WINDOWS = FUNCIONA 100%
[/quote]
Se não me engano isso é configurável, apenas pra constar, mas se vem assim como padrão é melhor se adaptar mesmo.
Pow quem ainda usa fluxbox deve queimar no mármore do inferno hehehe… :twisted:
não resisti a brincadeirinha, foi mal :oops:
Eu fiz assim, quando a janela chega ao canto esquerdo da tela, ela vai diminuindo, para a janela correr para a esquerda, funcionou 100% pq ela simplesmente tem que ser redimimensionada:
Integer windowWidth=theWindow.getWidth();
Integer speed=1;
while (windowWidth > 0){
windowWidth-=speed;
speed+=10;
theWindow.setSize(windowWidth, theWindow.getHeight());
try {
Thread.sleep(10);
}catch (NaoLembrooQue ee){ //rs
}
}
Agora, para correr para a direita FUDEU TUDO, pq a cada vez que eu redimensiono a janela, tem que reposiciona-la, ai vira uma piscação soh…
veja:
[code]
Integer windowWidth=theWindow.getWidth();
Integer speed=1;
while (windowWidth > 0){
windowWidth-=speed;
speed+=10;
theWindow.setSize(windowWidth, theWindow.getHeight());
theWindow.setLocation(screenWidth - windowWidth, theWindow.getY()); //O problema tah aqui
try {
Thread.sleep(10);
}catch (NaoLembrooQue ee){ //rs
}
}
Pergunta aos mestres…
HÁ COMO DESATIVAR O REPAINT SOMENTE NAQUELE MOMENTO? pois a janela quando chega no canto, está bem veloz, se ela nao ficasse dando repaint, os usuarios nao iam perceber nada…