Gnome ou kde?

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 &lt 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]

???

Usando JNI:
http://www.guj.com.br/posts/list/27351.java

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 &gt 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 &gt 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…