[libwnck] core: Add Screen argument to _wnck_get_cardinal(), _wnck_get_pid()



commit edb4c29daa701fd9d3bc236c25a45afac551f3a5
Author: Vincent Untz <vuntz gnome org>
Date:   Wed Jan 19 22:21:00 2011 +0100

    core: Add Screen argument to _wnck_get_cardinal(), _wnck_get_pid()

 libwnck/application.c |    3 ++-
 libwnck/screen.c      |    9 ++++++---
 libwnck/util.c        |   20 ++++++++++++--------
 libwnck/window.c      |    6 ++++--
 libwnck/xutils.c      |   13 +++++++++----
 libwnck/xutils.h      |    6 ++++--
 6 files changed, 37 insertions(+), 20 deletions(-)
---
diff --git a/libwnck/application.c b/libwnck/application.c
index 936bc5d..85d7506 100644
--- a/libwnck/application.c
+++ b/libwnck/application.c
@@ -536,7 +536,8 @@ _wnck_application_create (Window      xwindow,
   if (application->priv->name)
     application->priv->name_from_leader = TRUE;
 
-  application->priv->pid = _wnck_get_pid (application->priv->xwindow);
+  application->priv->pid = _wnck_get_pid (WNCK_SCREEN_XSCREEN (screen),
+                                          application->priv->xwindow);
 
   application->priv->startup_id = _wnck_get_utf8_property (application->priv->xwindow,
                                                            _wnck_atom_get ("_NET_STARTUP_ID"));
diff --git a/libwnck/screen.c b/libwnck/screen.c
index d51b472..a78c460 100644
--- a/libwnck/screen.c
+++ b/libwnck/screen.c
@@ -1730,7 +1730,8 @@ update_workspace_list (WnckScreen *screen)
   ++reentrancy_guard;
 
   n_spaces = 0;
-  if (!_wnck_get_cardinal (screen->priv->xroot,
+  if (!_wnck_get_cardinal (WNCK_SCREEN_XSCREEN (screen),
+                           screen->priv->xroot,
                            _wnck_atom_get ("_NET_NUMBER_OF_DESKTOPS"),
                            &n_spaces))
     n_spaces = 1;
@@ -1963,7 +1964,8 @@ update_active_workspace (WnckScreen *screen)
   screen->priv->need_update_active_workspace = FALSE;
 
   number = 0;
-  if (!_wnck_get_cardinal (screen->priv->xroot,
+  if (!_wnck_get_cardinal (WNCK_SCREEN_XSCREEN (screen),
+                           screen->priv->xroot,
                            _wnck_atom_get ("_NET_CURRENT_DESKTOP"),
                            &number))
     number = -1;
@@ -2170,7 +2172,8 @@ update_showing_desktop (WnckScreen *screen)
   screen->priv->need_update_showing_desktop = FALSE;
 
   showing_desktop = FALSE;
-  _wnck_get_cardinal (screen->priv->xroot,
+  _wnck_get_cardinal (WNCK_SCREEN_XSCREEN (screen),
+                      screen->priv->xroot,
                       _wnck_atom_get ("_NET_SHOWING_DESKTOP"),
                       &showing_desktop);
 
diff --git a/libwnck/util.c b/libwnck/util.c
index be7f9af..6ef020a 100644
--- a/libwnck/util.c
+++ b/libwnck/util.c
@@ -278,12 +278,13 @@ wnck_gulong_equal (gconstpointer a,
 }
 
 static gulong
-wnck_check_window_for_pid (Window win,
-                           XID    match_xid,
-                           XID    mask)
+wnck_check_window_for_pid (Screen *screen,
+                           Window  win,
+                           XID     match_xid,
+                           XID     mask)
 {
   if ((win & ~mask) == match_xid) {
-    return _wnck_get_pid (win);
+    return _wnck_get_pid (screen, win);
   }
 
   return 0;
@@ -291,6 +292,7 @@ wnck_check_window_for_pid (Window win,
 
 static void
 wnck_find_pid_for_resource_r (Display *xdisplay,
+                              Screen  *screen,
                               Window   win_top,
                               XID      match_xid,
                               XID      mask,
@@ -308,7 +310,7 @@ wnck_find_pid_for_resource_r (Display *xdisplay,
   while (gtk_events_pending ())
     gtk_main_iteration ();
 
-  found_pid = wnck_check_window_for_pid (win_top, match_xid, mask);
+  found_pid = wnck_check_window_for_pid (screen, win_top, match_xid, mask);
   if (found_pid != 0)
     {
       *xid = win_top;
@@ -325,7 +327,7 @@ wnck_find_pid_for_resource_r (Display *xdisplay,
 
   for (i = 0; i < n_children; i++)
     {
-      wnck_find_pid_for_resource_r (xdisplay, children[i],
+      wnck_find_pid_for_resource_r (xdisplay, screen, children[i],
                                     match_xid, mask, xid, pid);
 
       if (*pid != 0)
@@ -401,14 +403,16 @@ wnck_pid_read_resource_usage_fill_cache (struct xresclient_state *state)
 
   for (i = 0; i < ScreenCount (state->xdisplay); i++)
     {
-      Window root;
+      Screen *screen;
+      Window  root;
 
+      screen = ScreenOfDisplay (state->xdisplay, i);
       root = RootWindow (state->xdisplay, i);
 
       if (root == None)
         continue;
 
-      wnck_find_pid_for_resource_r (state->xdisplay, root, match_xid,
+      wnck_find_pid_for_resource_r (state->xdisplay, screen, root, match_xid,
                                     state->clients[state->next].resource_mask,
                                     &xid, &pid);
 
diff --git a/libwnck/window.c b/libwnck/window.c
index 97dda53..01c9e96 100644
--- a/libwnck/window.c
+++ b/libwnck/window.c
@@ -530,7 +530,8 @@ _wnck_window_create (Window      xwindow,
     _wnck_get_session_id (window->priv->xwindow);
 
   window->priv->pid =
-    _wnck_get_pid (window->priv->xwindow);
+    _wnck_get_pid (WNCK_SCREEN_XSCREEN (window->priv->screen),
+                   window->priv->xwindow);
 
   window->priv->x = 0;
   window->priv->y = 0;
@@ -2802,7 +2803,8 @@ update_workspace (WnckWindow *window)
   old = window->priv->workspace;
 
   val = ALL_WORKSPACES;
-  _wnck_get_cardinal (window->priv->xwindow,
+  _wnck_get_cardinal (WNCK_SCREEN_XSCREEN (window->priv->screen),
+                      window->priv->xwindow,
                       _wnck_atom_get ("_NET_WM_DESKTOP"),
                       &val);
 
diff --git a/libwnck/xutils.c b/libwnck/xutils.c
index 394c1d5..8696b7f 100644
--- a/libwnck/xutils.c
+++ b/libwnck/xutils.c
@@ -32,10 +32,12 @@
 #include "inlinepixbufs.h"
 
 gboolean
-_wnck_get_cardinal (Window  xwindow,
+_wnck_get_cardinal (Screen *screen,
+                    Window  xwindow,
                     Atom    atom,
                     int    *val)
 {
+  Display *display;
   Atom type;
   int format;
   gulong nitems;
@@ -43,11 +45,13 @@ _wnck_get_cardinal (Window  xwindow,
   gulong *num;
   int err, result;
 
+  display = DisplayOfScreen (screen);
+
   *val = 0;
 
   _wnck_error_trap_push ();
   type = None;
-  result = XGetWindowProperty (_wnck_get_default_display(),
+  result = XGetWindowProperty (display,
 			       xwindow,
 			       atom,
 			       0, G_MAXLONG,
@@ -1138,11 +1142,12 @@ _wnck_get_session_id (Window xwindow)
 }
 
 int
-_wnck_get_pid (Window xwindow)
+_wnck_get_pid (Screen *screen,
+               Window  xwindow)
 {
   int val;
 
-  if (!_wnck_get_cardinal (xwindow,
+  if (!_wnck_get_cardinal (screen, xwindow,
                            _wnck_atom_get ("_NET_WM_PID"),
                            &val))
     return 0;
diff --git a/libwnck/xutils.h b/libwnck/xutils.h
index 2b35d09..8246d48 100644
--- a/libwnck/xutils.h
+++ b/libwnck/xutils.h
@@ -38,7 +38,8 @@ G_BEGIN_DECLS
 
 #define WNCK_APP_WINDOW_EVENT_MASK (PropertyChangeMask | StructureNotifyMask)
 
-gboolean _wnck_get_cardinal      (Window  xwindow,
+gboolean _wnck_get_cardinal      (Screen *screen,
+                                  Window  xwindow,
                                   Atom    atom,
                                   int    *val);
 int      _wnck_get_wm_state      (Window  xwindow);
@@ -112,7 +113,8 @@ void _wnck_change_viewport (Screen *screen,
 			    int     y);
 
 char*  _wnck_get_session_id     (Window xwindow);
-int    _wnck_get_pid            (Window xwindow);
+int    _wnck_get_pid            (Screen *screen,
+                                 Window  xwindow);
 char*  _wnck_get_name           (Window xwindow);
 char*  _wnck_get_icon_name      (Window xwindow);
 char*  _wnck_get_res_class_utf8 (Window xwindow);



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]