All pastes #132813 Raw Edit

Casanova

public c v1 · immutable
#132813 ·published 2006-08-15 13:38 UTC
rendered paste body
#define WNCK_I_KNOW_THIS_IS_UNSTABLE#include <libwnck/libwnck.h>#include <stdio.h>#include "gdk/gdkx.h"static GList* m_window_list = NULL;/* private cut-n-paste functions from libwnck/xutils.c */void _wnck_activate (Screen *screen, 		     Window  xwindow,		     Time    timestamp);void _wnck_activate_workspace (Screen *screen,			       int     new_active_space,			       Time    timestamp);void _modified_wnck_window_activate    (WnckWindow *window);void _modified_wnck_workspace_activate (WnckWorkspace *space,					WnckWindow    *window);void_wnck_activate (Screen *screen,                Window  xwindow,                Time    timestamp){     XEvent xev;     Atom   net_active_window_atom;     /* Deviating from libwnck here because copying _wnck_atom_get sounds like      * overkill.  This is slightly slower, but oh well.      */     net_active_window_atom = XInternAtom (gdk_display,					   "_NET_ACTIVE_WINDOW",					   FALSE);       xev.xclient.type = ClientMessage;     xev.xclient.serial = 0;     xev.xclient.send_event = True;     xev.xclient.display = gdk_display;     xev.xclient.window = xwindow;     xev.xclient.message_type = net_active_window_atom;     xev.xclient.format = 32;     xev.xclient.data.l[0] = 2;     xev.xclient.data.l[1] = timestamp;     xev.xclient.data.l[2] = 0;     xev.xclient.data.l[3] = 0;     xev.xclient.data.l[4] = 0;     XSendEvent (gdk_display,		 RootWindowOfScreen (screen),		 False,		 SubstructureRedirectMask | SubstructureNotifyMask,		 &xev); }void_wnck_activate_workspace (Screen *screen,                          int     new_active_space,                          Time    timestamp){     XEvent xev;     Atom   net_current_desktop_atom;       /* Deviating from libwnck here because copying _wnck_atom_get sounds like      * overkill.  This is slightly slower, but oh well.      */     net_current_desktop_atom = XInternAtom (gdk_display,					     "_NET_CURRENT_DESKTOP",					     FALSE);     xev.xclient.type = ClientMessage;     xev.xclient.serial = 0;     xev.xclient.send_event = True;     xev.xclient.display = gdk_display;     xev.xclient.window = RootWindowOfScreen (screen);     xev.xclient.message_type = net_current_desktop_atom;     xev.xclient.format = 32;     xev.xclient.data.l[0] = new_active_space;     xev.xclient.data.l[1] = timestamp;     xev.xclient.data.l[2] = 0;     xev.xclient.data.l[3] = 0;     xev.xclient.data.l[4] = 0;     XSendEvent (gdk_display,		 RootWindowOfScreen (screen),		 False,		 SubstructureRedirectMask | SubstructureNotifyMask,		 &xev);}void_modified_wnck_window_activate (WnckWindow *window){     Screen  *screen;     Window   xid;     XWindowAttributes attrs;     guint32 temp=gtk_get_current_event_time();          xid = wnck_window_get_xid (window);     XGetWindowAttributes(gdk_display, xid, &attrs);     printf ("in window value: %d",temp);     _wnck_activate (attrs.screen,		     xid,		     temp);}/* The WnckWindow is merely used to get the x screen */void_modified_wnck_workspace_activate (WnckWorkspace *space,				   WnckWindow    *window){     Screen  *screen;     Window   xid;     XWindowAttributes attrs;     guint32 temp=gtk_get_current_event_time();     xid = wnck_window_get_xid (window);     XGetWindowAttributes(gdk_display, xid, &attrs);     printf ("in workspace value: %d",temp);     _wnck_activate_workspace (attrs.screen,			       wnck_workspace_get_number (space),			       temp);}void refreshList(){     WnckScreen *screen;#ifdef HAVE_WNCK_CLIENT_TYPE     static gboolean client_type_set = FALSE;#endif#ifdef HAVE_WNCK_CLIENT_TYPE     /* Register as a pager, so that the window manager treats us the      * same as a taskbar (i.e. having global awareness of apps) rather      * than as a normal app (i.e. primarily only knowing about and      * having UI for dealing with my own windows).  Doesn't matter for      * most cases, but some WMs in some cases treat the two      * differently.      */     if (!client_type_set) {	  wnck_set_client_type (WNCK_CLIENT_TYPE_PAGER);	  client_type_set = TRUE;     }#endif     screen = wnck_screen_get_default ();     wnck_screen_force_update (screen);     m_window_list = wnck_screen_get_windows (screen);}     int main (int argc, char **argv){     WnckWorkspace *workspace;     gboolean bSuccess;     int index = 0, a=0;     bSuccess = FALSE;     char* keyLabel;     GList *window_list_entry;     gdk_init(&argc, &argv);     gtk_init(&argc, &argv);     refreshList();     window_list_entry = m_window_list;     while (window_list_entry != NULL) {	  printf ("%d %s\n", index,		  wnck_window_get_name(window_list_entry->data));	  window_list_entry = window_list_entry->next;	  index++;     }     printf ("Enter choice: ");     scanf ("%d",&index);     window_list_entry = m_window_list;     while (a<index) {	  window_list_entry = window_list_entry->next;	  a++;     }     workspace = wnck_window_get_workspace (window_list_entry->data);     if (workspace != NULL)	  _modified_wnck_workspace_activate (workspace,					     window_list_entry->data);     _modified_wnck_window_activate (window_list_entry->data);     return 0;}