Construindo janelas seguidoras

Primeiro post, quem diria … eu … escrevendo em um blog … uhaeuhae.
Mas não é um blog qualquer, meus amigos sabem que sou persistente, tenho idéias malucas as vezes e acabo conseguindo torna-las realidade. Por isso este blog vai trazer muitas coisas interessantes, coisas fora do normal.
Bem, então vamos lá.

Um dia tive a maluca idéia de criar campos de usuário, campos onde o usuário personalizaria sua aplicação. Para isso resolvi desenvolver uma janela que "segui-se" a janela mãe, assim parecendo ser uma aplicação só. Deem uma olhada no resultado final:

Este tipo de janela, pode ser usado em muitas outras funcionalidades, show de bola!!

Veja o código simples e bem comentado!

hide();
			$btnOpen->set_label('Open');
			$visible = false;
		} else {
		
			// Mostra a janela filha
			$frmGlue->show_all();
			$btnOpen->set_label('Close');
			$visible = true;
		}
	}
	
	// Eventos da janela principal
	function frmMain_onEvent($window, $event) {
		global $frmMain, $frmGlue;
		
		// Verifica se a janela está se movendo
		if($event->type == 13) {
			
			// Move a janela filha para proximo da janela principal
			$frmGlue->move($event->x + $event->width + 3, $event->y - 22);
		}
	}
	
	// Cria as janelas
	$frmMain = new GtkWindow();
	$fixMain = new GtkFixed();
	$frmGlue = new GtkWindow();
	
	// Seta o tamanho das janelas
	$frmMain->set_size_request(400, 300);
	$frmGlue->set_size_request(100, 300);
	
	// Não deixa mudar o tamanho das janelas
	$frmMain->set_resizable(false);
	$frmGlue->set_resizable(false);
	
	// Aqui está o segredo. 
	// Aqui faz a janela filha ser realmente filha da janela pai
	// ho!ho! obvio, mas é isso mesmo =D
	$frmGlue->set_transient_for($frmMain);
	
	// Cria o botão para abrir ou fechar a janela filha
	$btnOpen = new GtkButton('Open');
	$fixMain->put($btnOpen, 8, 8);
	
	// Mostra tudo
	$frmMain->add($fixMain);
	$frmMain->show_all();
	
	// Inicia escodido
	$visible = false;
	
	// Conecta o sinal ao destruir a aplicação
	$frmMain->connect_simple('destroy', array('Gtk', 'main_quit'));
	
	// Conecta o sinal event à janela principal
	$frmMain->connect('event', 'frmMain_onEvent');
	
	// Conecta o sinal clicked do botão
	$btnOpen->connect_simple('clicked', 'btnOpen_onClick');
	
	// Inicia a aplicação
	Gtk::main();

e o resultado final desta maravilha:

Pessoal, maravilha, até a proxima =D