Gnome ou kde?

13 respostas
kemperacc

Tem como eu descobrir atraves do meu codigo se o programa esta rodando no gnome ou no kde?

13 Respostas

Luiz_Aguiar

Desculpa a curiosidade, mas pra que gostaria de saber essa informação?

T

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?

ciczan

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…

peczenyj

Veja se algum desses windowmanagers seta alguma variavel de ambiente que vc possa analisar, como a WINDOWMANAGER – isso não é padrão…

kemperacc

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;
		}

	}
Luiz_Aguiar

Nos outros isso não acontece? no xfce por exemplo… em quais ambientes vc testou?

kemperacc

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%

marcelomartins

gnome

:twisted:

kemperacc

marcelomartins:
gnome

:twisted:

???

fcmartins

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

ciczan

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().

Luiz_Aguiar

kemperacc:
GNOME = O PROBLEMA OCORRE
KDE = O PROBLEMA OCORRE

FLUXBOX = NAO OCORRE, FUNCIONA 100%
WINDOWS = FUNCIONA 100%


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:

kemperacc

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...

Criado 16 de novembro de 2006
Ultima resposta 16 de nov. de 2006
Respostas 13
Participantes 7