1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86
|
#include<stdio.h>
#include <glib.h>
#include <gdk/gdk.h>
/* Sans ce "define", impossible de compiler le programme !
* L'API de cette librairie n'est pour le moment pas public, les développeurs
* se réservent donc le droit de modifier/supprimer le comportement d'une ou
* plusieurs fonctions sans préavis
*/
#define WNCK_I_KNOW_THIS_IS_UNSTABLE
#include <libwnck/libwnck.h>
int main(int argc, char *argv[])
{
/* Pour test, nom de la fenêtre recherchée : un gnome-terminal */
char *win_name = "guillaume@gmlinux: ~";
int i;
int n = 0;
int nscreens;
int found = 0;
WnckScreen *screen = NULL;
WnckWindow *window = NULL;
GList *windowList = NULL;
GList *w = NULL;
const char *window_name = NULL;
/* Initialisation de l'environnement GTK */
gtk_init(&argc, &argv);
/* Parcours de la liste des ecrans */
nscreens = gdk_display_get_n_screens(gdk_display_get_default());
for(i = 0; i < nscreens; i++)
{
/* Ecran n°i */
screen = wnck_screen_get(i);
/* L'appel a wnck_screen_force_update() est obligatoire.
* En effet, la librairie libwnck étant asynchrone par nature,
* la liste des fenêtres manipulées par l'objet "screen" que
* nous venons de créer est vide pour le moment. Il faut
* attendre quelques tours de la boucle principale
* ("g_main_loop") pour que la liste soit mise à jour.
* L'appel ci-dessous permet de demander explicitement la mise
* à jour de l'objet "screen" sans attendre une mise à jour par
* la boucle principale.
*/
wnck_screen_force_update(screen);
/* Récupération de la liste des fenêtres dessinées sur cet
* écran
*/
windowList = wnck_screen_get_windows(screen);
w = windowList;
found = 0;
while(w != NULL && !found)
{
window = WNCK_WINDOW(w->data);
/* Récupération du nom de la fenêtre */
window_name = wnck_window_get_name(window);
/* S'il s'agit de la fenêtre recherchée, on sort de la
* boucle
*/
if(strcmp(win_name, window_name) == 0)
{
found = 1;
}
/* Fenêtre suivante */
w = w->next;
}
/* Fenêtre trouvée, on demande sa mise au premier plan */
if(found == 1)
{
wnck_window_activate(window, 5);
}
}
return 0;
} |
Partager