Your message dated Sun, 03 Oct 2010 16:58:27 +0200 with message-id <4CA89A13.4090801@dogguy.org> and subject line Re: Bug#598865: unblock: libwnck/2.30.4-2 has caused the Debian Bug report #598865, regarding unblock: libwnck/2.30.4-2 to be marked as done. This means that you claim that the problem has been dealt with. If this is not the case it is now your responsibility to reopen the Bug report if necessary, and/or fix the problem forthwith. (NB: If you are a system administrator and have no idea what this message is talking about, this may indicate a serious mail system misconfiguration somewhere. Please contact owner@bugs.debian.org immediately.) -- 598865: http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=598865 Debian Bug Tracking System Contact owner@bugs.debian.org with problems
--- Begin Message ---
- To: submit@bugs.debian.org
- Subject: unblock: libwnck/2.30.4-2
- From: Josselin Mouette <joss@debian.org>
- Date: Sat, 02 Oct 2010 19:22:32 +0200
- Message-id: <[🔎] 1286040152.6455.101.camel@tomoyo>
Package: release.debian.org Severity: normal User: release.debian.org@packages.debian.org Usertags: freeze-exception Hi, please unblock libwnck for squeeze. libwnck (2.30.4-2) unstable; urgency=low * 10_pager_multirow.patch: stolen upstream. Fix an unitialized value bug that causes issues with: + Multi-row pagers. Closes: #597540. + Vertical pagers. Closes: #598122. + Xmonad. Closes: #597911. libwnck (2.30.4-1) unstable; urgency=low * 01_tasklist_orientation.patch: require to set a macro to use the non-upstreamed API. * New upstream translation and bugfix release. Upstream changes: ============== Version 2.30.4 ============== Fixes - Stop using gdk_display (Vincent) Misc - Update information in README and other files (Vincent) Translators - Dirgita (id) Attaching the upstream changes, and the added patch. The change to 01_tasklist_orientation is as trivial as the changelog says. Cheers, -- .''`. Josselin Mouette : :' : `. `' “If you behave this way because you are blackmailed by someone, `- […] I will see what I can do for you.” -- Jörg Schilling--- libwnck-2.30.3/libwnck/private.h 2010-02-09 12:27:10.000000000 +0000 +++ libwnck-2.30.4/libwnck/private.h 2010-09-11 10:03:36.000000000 +0000 @@ -110,6 +110,7 @@ gboolean _wnck_workspace_set_viewport (WnckWorkspace *space, int x, int y); void _wnck_init (void); +Display *_wnck_get_default_display (void); #define DEFAULT_ICON_WIDTH 32 #define DEFAULT_ICON_HEIGHT 32 --- libwnck-2.30.3/libwnck/screen.c 2010-08-04 11:28:16.000000000 +0000 +++ libwnck-2.30.4/libwnck/screen.c 2010-09-13 04:12:48.000000000 +0000 @@ -566,14 +566,14 @@ sn_error_trap_push (SnDisplay *display, Display *xdisplay) { - gdk_error_trap_push (); + _wnck_error_trap_push (); } static void sn_error_trap_pop (SnDisplay *display, Display *xdisplay) { - gdk_error_trap_pop (); + _wnck_error_trap_pop (); } #endif /* HAVE_STARTUP_NOTIFICATION */ @@ -581,13 +581,17 @@ wnck_screen_construct (WnckScreen *screen, int number) { + Display *display; + + display = _wnck_get_default_display (); + /* Create the initial state of the screen. */ - screen->priv->xroot = RootWindow (gdk_display, number); - screen->priv->xscreen = ScreenOfDisplay (gdk_display, number); + screen->priv->xroot = RootWindow (display, number); + screen->priv->xscreen = ScreenOfDisplay (display, number); screen->priv->number = number; #ifdef HAVE_STARTUP_NOTIFICATION - screen->priv->sn_display = sn_display_new (gdk_display, + screen->priv->sn_display = sn_display_new (display, sn_error_trap_push, sn_error_trap_pop); #endif @@ -624,14 +628,18 @@ WnckScreen* wnck_screen_get (int index) { - g_return_val_if_fail (gdk_display != NULL, NULL); + Display *display; - if (index >= ScreenCount (gdk_display)) + display = _wnck_get_default_display (); + + g_return_val_if_fail (display != NULL, NULL); + + if (index >= ScreenCount (display)) return NULL; if (screens == NULL) { - screens = g_new0 (WnckScreen*, ScreenCount (gdk_display)); + screens = g_new0 (WnckScreen*, ScreenCount (display)); _wnck_event_filter_init (); } @@ -648,8 +656,12 @@ WnckScreen* _wnck_screen_get_existing (int number) { - g_return_val_if_fail (gdk_display != NULL, NULL); - g_return_val_if_fail (number < ScreenCount (gdk_display), NULL); + Display *display; + + display = _wnck_get_default_display (); + + g_return_val_if_fail (display != NULL, NULL); + g_return_val_if_fail (number < ScreenCount (display), NULL); if (screens != NULL) return screens[number]; @@ -670,7 +682,7 @@ { int default_screen; - default_screen = DefaultScreen (gdk_display); + default_screen = DefaultScreen (_wnck_get_default_display ()); return wnck_screen_get (default_screen); } @@ -693,12 +705,15 @@ wnck_screen_get_for_root (gulong root_window_id) { int i; + Display *display; if (screens == NULL) return NULL; i = 0; - while (i < ScreenCount (gdk_display)) + display = _wnck_get_default_display (); + + while (i < ScreenCount (display)) { if (screens[i] != NULL && screens[i]->priv->xroot == root_window_id) return screens[i]; --- libwnck-2.30.3/libwnck/util.c 2010-03-29 23:46:48.000000000 +0000 +++ libwnck-2.30.4/libwnck/util.c 2010-09-11 11:11:10.000000000 +0000 @@ -745,6 +745,14 @@ } } +Display * +_wnck_get_default_display (void) +{ + /* FIXME: when we fix libwnck to not use the GDK default display, we will + * need to fix wnckprop accordingly. */ + return GDK_DISPLAY_XDISPLAY (gdk_display_get_default ()); +} + /* stock icon code Copyright (C) 2002 Jorn Baayen <jorn@nl.linux.org> */ typedef struct { --- libwnck-2.30.3/libwnck/window.c 2010-08-04 11:22:28.000000000 +0000 +++ libwnck-2.30.4/libwnck/window.c 2010-09-11 10:19:52.000000000 +0000 @@ -579,6 +579,12 @@ g_object_unref (G_OBJECT (window)); } +static Display * +_wnck_window_get_display (WnckWindow *window) +{ + return DisplayOfScreen (WNCK_SCREEN_XSCREEN (window->priv->screen)); +} + /** * wnck_window_has_name: * @window: a #WnckWindow. @@ -979,7 +985,7 @@ } _wnck_error_trap_push (); - XChangeProperty (gdk_display, + XChangeProperty (_wnck_window_get_display (window), window->priv->xwindow, _wnck_atom_get ("_NET_WM_WINDOW_TYPE"), XA_ATOM, 32, PropModeReplace, @@ -3057,7 +3063,7 @@ return; _wnck_error_trap_push (); - hints = XGetWMHints (gdk_display, window->priv->xwindow); + hints = XGetWMHints (_wnck_window_get_display (window), window->priv->xwindow); _wnck_error_trap_pop (); if (hints) --- libwnck-2.30.3/libwnck/wnckprop.c 2010-02-09 12:27:10.000000000 +0000 +++ libwnck-2.30.4/libwnck/wnckprop.c 2010-09-11 11:14:45.000000000 +0000 @@ -320,35 +320,37 @@ static guint32 get_xserver_timestamp (WnckScreen *screen) { + Display *display; int number; Screen *xscreen; TimeStampInfo info; unsigned char c = 'a'; XEvent xevent; + display = GDK_DISPLAY_XDISPLAY (gdk_display_get_default ()); number = wnck_screen_get_number (screen); - xscreen = ScreenOfDisplay (gdk_display, number); + xscreen = ScreenOfDisplay (display, number); - info.window = XCreateSimpleWindow (gdk_display, + info.window = XCreateSimpleWindow (display, RootWindowOfScreen (xscreen), 0, 0, 10, 10, 0, - WhitePixel (gdk_display, number), - WhitePixel (gdk_display, number)); - info.timestamp_prop_atom = XInternAtom (gdk_display, "_TIMESTAMP_PROP", + WhitePixel (display, number), + WhitePixel (display, number)); + info.timestamp_prop_atom = XInternAtom (display, "_TIMESTAMP_PROP", FALSE); - XSelectInput (gdk_display, info.window, PropertyChangeMask); + XSelectInput (display, info.window, PropertyChangeMask); - XChangeProperty (gdk_display, info.window, + XChangeProperty (display, info.window, info.timestamp_prop_atom, info.timestamp_prop_atom, 8, PropModeReplace, &c, 1); - XIfEvent (gdk_display, &xevent, + XIfEvent (display, &xevent, timestamp_predicate, (XPointer)&info); - XDestroyWindow (gdk_display, info.window); + XDestroyWindow (display, info.window); - XSync (gdk_display, False); + XSync (display, False); return xevent.xproperty.time; } @@ -1650,7 +1652,8 @@ } static gboolean -wm_state_set (Window window) +wm_state_set (Display *display, + Window window) { Atom wm_state; gulong nitems; @@ -1663,7 +1666,7 @@ wm_state = gdk_x11_get_xatom_by_name ("WM_STATE"); gdk_error_trap_push (); - result = XGetWindowProperty (gdk_display, + result = XGetWindowProperty (display, window, wm_state, 0, G_MAXLONG, @@ -1683,7 +1686,8 @@ } static WnckWindow * -find_managed_window (Window window) +find_managed_window (Display *display, + Window window) { Window root; Window parent; @@ -1692,11 +1696,11 @@ guint nkids; int i, result; - if (wm_state_set (window)) + if (wm_state_set (display, window)) return wnck_window_get (window); gdk_error_trap_push (); - result = XQueryTree (gdk_display, window, &root, &parent, &kids, &nkids); + result = XQueryTree (display, window, &root, &parent, &kids, &nkids); if (gdk_error_trap_pop () || !result) return NULL; @@ -1704,13 +1708,13 @@ for (i = 0; i < nkids; i++) { - if (wm_state_set (kids [i])) + if (wm_state_set (display, kids [i])) { retval = wnck_window_get (kids [i]); break; } - retval = find_managed_window (kids [i]); + retval = find_managed_window (display, kids [i]); if (retval != NULL) break; } @@ -1727,7 +1731,7 @@ if (event->subwindow == None) return; - got_from_user = find_managed_window (event->subwindow); + got_from_user = find_managed_window (event->display, event->subwindow); } static GdkFilterReturn @@ -1744,7 +1748,7 @@ clean_up (); return GDK_FILTER_REMOVE; case KeyPress: - if (xevent->xkey.keycode == XKeysymToKeycode (gdk_display, XK_Escape)) + if (xevent->xkey.keycode == XKeysymToKeycode (xevent->xany.display, XK_Escape)) { clean_up (); return GDK_FILTER_REMOVE; --- libwnck-2.30.3/libwnck/xutils.c 2010-06-01 13:56:13.000000000 +0000 +++ libwnck-2.30.4/libwnck/xutils.c 2010-09-11 11:07:32.000000000 +0000 @@ -46,7 +46,7 @@ _wnck_error_trap_push (); type = None; - result = XGetWindowProperty (gdk_display, + result = XGetWindowProperty (_wnck_get_default_display(), xwindow, atom, 0, G_MAXLONG, @@ -87,7 +87,7 @@ _wnck_error_trap_push (); type = None; - result = XGetWindowProperty (gdk_display, + result = XGetWindowProperty (_wnck_get_default_display(), xwindow, wm_state, 0, G_MAXLONG, @@ -127,7 +127,7 @@ _wnck_error_trap_push (); type = None; - result = XGetWindowProperty (gdk_display, + result = XGetWindowProperty (_wnck_get_default_display(), xwindow, atom, 0, G_MAXLONG, @@ -167,7 +167,7 @@ _wnck_error_trap_push (); type = None; - result = XGetWindowProperty (gdk_display, + result = XGetWindowProperty (_wnck_get_default_display(), xwindow, atom, 0, G_MAXLONG, @@ -207,7 +207,7 @@ _wnck_error_trap_push (); type = None; - result = XGetWindowProperty (gdk_display, + result = XGetWindowProperty (_wnck_get_default_display(), xwindow, atom, 0, G_MAXLONG, @@ -269,7 +269,7 @@ _wnck_error_trap_push (); text.nitems = 0; - if (XGetTextProperty (gdk_display, + if (XGetTextProperty (_wnck_get_default_display(), xwindow, &text, atom)) @@ -303,7 +303,7 @@ _wnck_error_trap_push (); str = NULL; - result = XGetWindowProperty (gdk_display, + result = XGetWindowProperty (_wnck_get_default_display(), xwindow, atom, 0, G_MAXLONG, False, XA_STRING, &type, &format, &nitems, @@ -345,7 +345,7 @@ _wnck_error_trap_push (); type = None; val = NULL; - result = XGetWindowProperty (gdk_display, + result = XGetWindowProperty (_wnck_get_default_display(), xwindow, atom, 0, G_MAXLONG, @@ -400,7 +400,7 @@ _wnck_error_trap_push (); type = None; - result = XGetWindowProperty (gdk_display, + result = XGetWindowProperty (_wnck_get_default_display(), xwindow, atom, 0, G_MAXLONG, @@ -444,7 +444,7 @@ _wnck_error_trap_push (); type = None; - result = XGetWindowProperty (gdk_display, + result = XGetWindowProperty (_wnck_get_default_display(), xwindow, atom, 0, G_MAXLONG, @@ -488,7 +488,7 @@ _wnck_error_trap_push (); type = None; - result = XGetWindowProperty (gdk_display, + result = XGetWindowProperty (_wnck_get_default_display(), xwindow, atom, 0, G_MAXLONG, @@ -535,7 +535,7 @@ _wnck_error_trap_push (); type = None; val = NULL; - result = XGetWindowProperty (gdk_display, + result = XGetWindowProperty (_wnck_get_default_display(), xwindow, atom, 0, G_MAXLONG, @@ -625,7 +625,7 @@ _wnck_error_trap_push (); - XChangeProperty (gdk_display, + XChangeProperty (_wnck_get_default_display(), xwindow, atom, utf8_string, 8, PropModeReplace, @@ -645,7 +645,7 @@ int _wnck_error_trap_pop (void) { - XSync (gdk_display, False); + XSync (_wnck_get_default_display(), False); return gdk_error_trap_pop (); } @@ -655,7 +655,10 @@ gpointer data) { XEvent *xevent = gdkxevent; +#ifdef HAVE_STARTUP_NOTIFICATION int i; + Display *display; +#endif /* HAVE_STARTUP_NOTIFICATION */ switch (xevent->type) { @@ -706,7 +709,9 @@ * us to send all events through sn_display_process_event */ i = 0; - while (i < ScreenCount (gdk_display)) + display = _wnck_get_default_display (); + + while (i < ScreenCount (display)) { WnckScreen *s; @@ -759,8 +764,12 @@ void _wnck_iconify (Window xwindow) { + Display *display; + + display = _wnck_get_default_display (); + _wnck_error_trap_push (); - XIconifyWindow (gdk_display, xwindow, DefaultScreen (gdk_display)); + XIconifyWindow (display, xwindow, DefaultScreen (display)); _wnck_error_trap_pop (); } @@ -779,7 +788,7 @@ if (gdkwindow) gdk_window_show (gdkwindow); else - XMapRaised (gdk_display, xwindow); + XMapRaised (_wnck_get_default_display (), xwindow); _wnck_error_trap_pop (); } @@ -788,12 +797,17 @@ Window xwindow, Time timestamp) { - XEvent xev; + Display *display; + Window root; + XEvent xev; + + display = DisplayOfScreen (screen); + root = RootWindowOfScreen (screen); xev.xclient.type = ClientMessage; xev.xclient.serial = 0; xev.xclient.send_event = True; - xev.xclient.display = gdk_display; + xev.xclient.display = display; xev.xclient.window = xwindow; xev.xclient.message_type = _wnck_atom_get ("_NET_CLOSE_WINDOW"); xev.xclient.format = 32; @@ -804,8 +818,8 @@ xev.xclient.data.l[4] = 0; _wnck_error_trap_push (); - XSendEvent (gdk_display, - RootWindowOfScreen (screen), + XSendEvent (display, + root, False, SubstructureRedirectMask | SubstructureNotifyMask, &xev); @@ -828,12 +842,17 @@ _wnck_keyboard_move (Screen *screen, Window xwindow) { - XEvent xev; + Display *display; + Window root; + XEvent xev; + + display = DisplayOfScreen (screen); + root = RootWindowOfScreen (screen); xev.xclient.type = ClientMessage; xev.xclient.serial = 0; xev.xclient.send_event = True; - xev.xclient.display = gdk_display; + xev.xclient.display = display; xev.xclient.window = xwindow; xev.xclient.message_type = _wnck_atom_get ("_NET_WM_MOVERESIZE"); xev.xclient.format = 32; @@ -844,8 +863,8 @@ xev.xclient.data.l[4] = _wnck_get_client_type (); _wnck_error_trap_push (); - XSendEvent (gdk_display, - RootWindowOfScreen (screen), + XSendEvent (display, + root, False, SubstructureRedirectMask | SubstructureNotifyMask, &xev); @@ -856,12 +875,17 @@ _wnck_keyboard_size (Screen *screen, Window xwindow) { - XEvent xev; + Display *display; + Window root; + XEvent xev; + + display = DisplayOfScreen (screen); + root = RootWindowOfScreen (screen); xev.xclient.type = ClientMessage; xev.xclient.serial = 0; xev.xclient.send_event = True; - xev.xclient.display = gdk_display; + xev.xclient.display = display; xev.xclient.window = xwindow; xev.xclient.message_type = _wnck_atom_get ("_NET_WM_MOVERESIZE"); xev.xclient.format = 32; @@ -872,8 +896,8 @@ xev.xclient.data.l[4] = _wnck_get_client_type (); _wnck_error_trap_push (); - XSendEvent (gdk_display, - RootWindowOfScreen (screen), + XSendEvent (display, + root, False, SubstructureRedirectMask | SubstructureNotifyMask, &xev); @@ -887,16 +911,21 @@ Atom state1, Atom state2) { - XEvent xev; + Display *display; + Window root; + XEvent xev; #define _NET_WM_STATE_REMOVE 0 /* remove/unset property */ #define _NET_WM_STATE_ADD 1 /* add/set property */ #define _NET_WM_STATE_TOGGLE 2 /* toggle property */ + display = DisplayOfScreen (screen); + root = RootWindowOfScreen (screen); + xev.xclient.type = ClientMessage; xev.xclient.serial = 0; xev.xclient.send_event = True; - xev.xclient.display = gdk_display; + xev.xclient.display = display; xev.xclient.window = xwindow; xev.xclient.message_type = _wnck_atom_get ("_NET_WM_STATE"); xev.xclient.format = 32; @@ -907,8 +936,8 @@ xev.xclient.data.l[4] = 0; _wnck_error_trap_push (); - XSendEvent (gdk_display, - RootWindowOfScreen (screen), + XSendEvent (display, + root, False, SubstructureRedirectMask | SubstructureNotifyMask, &xev); @@ -920,12 +949,17 @@ Window xwindow, int new_space) { - XEvent xev; + Display *display; + Window root; + XEvent xev; + + display = DisplayOfScreen (screen); + root = RootWindowOfScreen (screen); xev.xclient.type = ClientMessage; xev.xclient.serial = 0; xev.xclient.send_event = True; - xev.xclient.display = gdk_display; + xev.xclient.display = display; xev.xclient.window = xwindow; xev.xclient.message_type = _wnck_atom_get ("_NET_WM_DESKTOP"); xev.xclient.format = 32; @@ -936,8 +970,8 @@ xev.xclient.data.l[4] = 0; _wnck_error_trap_push (); - XSendEvent (gdk_display, - RootWindowOfScreen (screen), + XSendEvent (display, + root, False, SubstructureRedirectMask | SubstructureNotifyMask, &xev); @@ -949,16 +983,21 @@ Window xwindow, Time timestamp) { - XEvent xev; + Display *display; + Window root; + XEvent xev; if (timestamp == 0) g_warning ("Received a timestamp of 0; window activation may not " "function properly.\n"); + display = DisplayOfScreen (screen); + root = RootWindowOfScreen (screen); + xev.xclient.type = ClientMessage; xev.xclient.serial = 0; xev.xclient.send_event = True; - xev.xclient.display = gdk_display; + xev.xclient.display = display; xev.xclient.window = xwindow; xev.xclient.message_type = _wnck_atom_get ("_NET_ACTIVE_WINDOW"); xev.xclient.format = 32; @@ -969,8 +1008,8 @@ xev.xclient.data.l[4] = 0; _wnck_error_trap_push (); - XSendEvent (gdk_display, - RootWindowOfScreen (screen), + XSendEvent (display, + root, False, SubstructureRedirectMask | SubstructureNotifyMask, &xev); @@ -982,13 +1021,18 @@ int new_active_space, Time timestamp) { - XEvent xev; + Display *display; + Window root; + XEvent xev; + + display = DisplayOfScreen (screen); + root = RootWindowOfScreen (screen); 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.display = display; + xev.xclient.window = root; xev.xclient.message_type = _wnck_atom_get ("_NET_CURRENT_DESKTOP"); xev.xclient.format = 32; xev.xclient.data.l[0] = new_active_space; @@ -998,8 +1042,8 @@ xev.xclient.data.l[4] = 0; _wnck_error_trap_push (); - XSendEvent (gdk_display, - RootWindowOfScreen (screen), + XSendEvent (display, + root, False, SubstructureRedirectMask | SubstructureNotifyMask, &xev); @@ -1011,13 +1055,18 @@ int x, int y) { - XEvent xev; + Display *display; + Window root; + XEvent xev; + + display = DisplayOfScreen (screen); + root = RootWindowOfScreen (screen); 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.display = display; + xev.xclient.window = root; xev.xclient.message_type = _wnck_atom_get ("_NET_DESKTOP_VIEWPORT"); xev.xclient.format = 32; xev.xclient.data.l[0] = x; @@ -1027,8 +1076,8 @@ xev.xclient.data.l[4] = 0; _wnck_error_trap_push (); - XSendEvent (gdk_display, - RootWindowOfScreen (screen), + XSendEvent (display, + root, False, SubstructureRedirectMask | SubstructureNotifyMask, &xev); @@ -1039,13 +1088,18 @@ _wnck_toggle_showing_desktop (Screen *screen, gboolean show) { - XEvent xev; + Display *display; + Window root; + XEvent xev; + + display = DisplayOfScreen (screen); + root = RootWindowOfScreen (screen); xev.xclient.type = ClientMessage; xev.xclient.serial = 0; xev.xclient.send_event = True; - xev.xclient.display = DisplayOfScreen (screen); - xev.xclient.window = RootWindowOfScreen (screen); + xev.xclient.display = display; + xev.xclient.window = root; xev.xclient.message_type = _wnck_atom_get ("_NET_SHOWING_DESKTOP"); xev.xclient.format = 32; xev.xclient.data.l[0] = show != FALSE; @@ -1055,8 +1109,8 @@ xev.xclient.data.l[4] = 0; _wnck_error_trap_push (); - XSendEvent (DisplayOfScreen (screen), - RootWindowOfScreen (screen), + XSendEvent (display, + root, False, SubstructureRedirectMask | SubstructureNotifyMask, &xev); @@ -1172,7 +1226,7 @@ ch.res_name = NULL; ch.res_class = NULL; - XGetClassHint (gdk_display, xwindow, + XGetClassHint (_wnck_get_default_display (), xwindow, &ch); _wnck_error_trap_pop (); @@ -1254,11 +1308,11 @@ * and not changing them again */ XWindowAttributes attrs; - XGetWindowAttributes (gdk_display, xwindow, &attrs); + XGetWindowAttributes (_wnck_get_default_display (), xwindow, &attrs); mask |= attrs.your_event_mask; } - XSelectInput (gdk_display, xwindow, mask); + XSelectInput (_wnck_get_default_display (), xwindow, mask); _wnck_error_trap_pop (); } @@ -1455,7 +1509,7 @@ _wnck_error_trap_push (); type = None; data = NULL; - result = XGetWindowProperty (gdk_display, + result = XGetWindowProperty (_wnck_get_default_display (), xwindow, _wnck_atom_get ("_NET_WM_ICON"), 0, G_MAXLONG, @@ -1529,7 +1583,7 @@ if (d) *d = 1; - XGetGeometry (gdk_display, + XGetGeometry (_wnck_get_default_display (), pixmap, &root_ignored, &x_ignored, &y_ignored, &width, &height, &border_width_ignored, &depth); @@ -1775,7 +1829,7 @@ _wnck_error_trap_push (); icons = NULL; - result = XGetWindowProperty (gdk_display, xwindow, + result = XGetWindowProperty (_wnck_get_default_display (), xwindow, _wnck_atom_get ("KWM_WIN_ICON"), 0, G_MAXLONG, False, @@ -2092,7 +2146,7 @@ icon_cache->wm_hints_dirty = FALSE; _wnck_error_trap_push (); - hints = XGetWMHints (gdk_display, xwindow); + hints = XGetWMHints (_wnck_get_default_display (), xwindow); _wnck_error_trap_pop (); pixmap = None; mask = None; @@ -2251,16 +2305,19 @@ int *widthp, int *heightp) { + Display *display; int x, y; unsigned int width, height, bw, depth; Window root_window; width = 1; height = 1; + + display = DisplayOfScreen (screen); _wnck_error_trap_push (); - XGetGeometry (gdk_display, + XGetGeometry (display, xwindow, &root_window, &x, &y, &width, &height, &bw, &depth); @@ -2283,12 +2340,17 @@ int width, int height) { - XEvent xev; + Display *display; + Window root; + XEvent xev; + + display = DisplayOfScreen (screen); + root = RootWindowOfScreen (screen); xev.xclient.type = ClientMessage; xev.xclient.serial = 0; xev.xclient.send_event = True; - xev.xclient.display = gdk_display; + xev.xclient.display = display; xev.xclient.window = xwindow; xev.xclient.message_type = _wnck_atom_get ("_NET_MOVERESIZE_WINDOW"); xev.xclient.format = 32; @@ -2299,8 +2361,8 @@ xev.xclient.data.l[4] = height; _wnck_error_trap_push (); - XSendEvent (gdk_display, - RootWindowOfScreen (screen), + XSendEvent (display, + root, False, SubstructureRedirectMask | SubstructureNotifyMask, &xev); @@ -2313,16 +2375,21 @@ int *xp, int *yp) { - int x, y; - Window child; + Display *display; + Window root; + int x, y; + Window child; x = 0; y = 0; + + display = DisplayOfScreen (screen); + root = RootWindowOfScreen (screen); _wnck_error_trap_push (); - XTranslateCoordinates (gdk_display, + XTranslateCoordinates (display, xwindow, - RootWindowOfScreen (screen), + root, 0, 0, &x, &y, &child); _wnck_error_trap_pop (); @@ -2349,7 +2416,7 @@ _wnck_error_trap_push (); - XChangeProperty (gdk_display, + XChangeProperty (_wnck_get_default_display (), xwindow, _wnck_atom_get ("_NET_WM_ICON_GEOMETRY"), XA_CARDINAL, 32, PropModeReplace, @@ -2373,7 +2440,9 @@ int rows, int columns) { - gulong data[4]; + Display *display; + Window root; + gulong data[4]; /* FIXME: hack, hack, hack so as not * to have to add a orientation param @@ -2383,6 +2452,9 @@ */ g_assert ((rows == 0) || (columns == 0)); + display = DisplayOfScreen (xscreen); + root = RootWindowOfScreen (xscreen); + data[0] = (columns == 0) ? _NET_WM_ORIENTATION_HORZ : _NET_WM_ORIENTATION_VERT; data[1] = columns; data[2] = rows; @@ -2390,8 +2462,8 @@ _wnck_error_trap_push (); - XChangeProperty (gdk_display, - RootWindowOfScreen (xscreen), + XChangeProperty (display, + root, _wnck_atom_get ("_NET_DESKTOP_LAYOUT"), XA_CARDINAL, 32, PropModeReplace, (guchar *)&data, 4); @@ -2441,11 +2513,11 @@ info.timestamp_prop_atom = _wnck_atom_get ("_TIMESTAMP_PROP"); info.window = window; - XChangeProperty (gdk_display, window, + XChangeProperty (_wnck_get_default_display (), window, info.timestamp_prop_atom, info.timestamp_prop_atom, 8, PropModeReplace, &c, 1); - XIfEvent (gdk_display, &xevent, + XIfEvent (_wnck_get_default_display (), &xevent, timestamp_predicate, (XPointer)&info); return xevent.xproperty.time; @@ -2453,6 +2525,7 @@ typedef struct { + Display *display; int screen_number; int token; Window window; @@ -2467,7 +2540,7 @@ _wnck_free_layout_manager (LayoutManager *lm) { _wnck_error_trap_push (); - XDestroyWindow (gdk_display, lm->window); + XDestroyWindow (lm->display, lm->window); _wnck_error_trap_pop (); g_slice_free (LayoutManager, lm); @@ -2479,6 +2552,8 @@ _wnck_try_desktop_layout_manager (Screen *xscreen, int current_token) { + Display *display; + Window root; Atom selection_atom; Window owner; GSList *tmp; @@ -2488,19 +2563,22 @@ char buffer[256]; LayoutManager *lm; + display = DisplayOfScreen (xscreen); + root = RootWindowOfScreen (xscreen); number = XScreenNumberOfScreen (xscreen); sprintf (buffer, "_NET_DESKTOP_LAYOUT_S%d", number); selection_atom = _wnck_atom_get (buffer); - owner = XGetSelectionOwner (gdk_display, selection_atom); + owner = XGetSelectionOwner (display, selection_atom); tmp = layout_managers; while (tmp != NULL) { lm = tmp->data; - if (number == lm->screen_number) + if (display == lm->display && + number == lm->screen_number) { if (current_token == lm->token) { @@ -2535,23 +2613,23 @@ _wnck_error_trap_push (); - lm->window = XCreateSimpleWindow (gdk_display, - RootWindowOfScreen (xscreen), + lm->window = XCreateSimpleWindow (display, + root, 0, 0, 10, 10, 0, - WhitePixel (gdk_display, number), - WhitePixel (gdk_display, number)); + WhitePixel (display, number), + WhitePixel (display, number)); - XSelectInput (gdk_display, lm->window, PropertyChangeMask); + XSelectInput (display, lm->window, PropertyChangeMask); timestamp = get_server_time (lm->window); - XSetSelectionOwner (gdk_display, lm->selection_atom, + XSetSelectionOwner (display, lm->selection_atom, lm->window, timestamp); _wnck_error_trap_pop (); /* Check to see if we managed to claim the selection. */ - if (XGetSelectionOwner (gdk_display, lm->selection_atom) != + if (XGetSelectionOwner (display, lm->selection_atom) != lm->window) { g_free (lm); @@ -2559,7 +2637,7 @@ } xev.type = ClientMessage; - xev.window = RootWindow (gdk_display, number); + xev.window = root; xev.message_type = lm->manager_atom; xev.format = 32; xev.data.l[0] = timestamp; @@ -2569,7 +2647,7 @@ xev.data.l[4] = 0; /* manager specific data */ _wnck_error_trap_push (); - XSendEvent (gdk_display, RootWindow (gdk_display, number), + XSendEvent (display, root, False, StructureNotifyMask, (XEvent *)&xev); _wnck_error_trap_pop (); @@ -2583,10 +2661,12 @@ _wnck_release_desktop_layout_manager (Screen *xscreen, int current_token) { + Display *display; GSList *tmp; int number; LayoutManager *lm; + display = DisplayOfScreen (xscreen); number = XScreenNumberOfScreen (xscreen); tmp = layout_managers; @@ -2594,20 +2674,21 @@ { lm = tmp->data; - if (number == lm->screen_number) + if (display == lm->display && + number == lm->screen_number) { if (current_token == lm->token) { _wnck_error_trap_push (); /* release selection ownership */ - if (XGetSelectionOwner (gdk_display, lm->selection_atom) != + if (XGetSelectionOwner (display, lm->selection_atom) != lm->window) { Time timestamp; timestamp = get_server_time (lm->window); - XSetSelectionOwner (gdk_display, lm->selection_atom, + XSetSelectionOwner (display, lm->selection_atom, None, timestamp); } @@ -2636,7 +2717,8 @@ { lm = tmp->data; - if (xev->xany.window == lm->window && + if (xev->xany.display == lm->display && + xev->xany.window == lm->window && xev->xselectionclear.selection == lm->selection_atom) { _wnck_free_layout_manager (lm);From c4e2408bf81f476ee29f44e44d3adaaaf06afa06 Mon Sep 17 00:00:00 2001 From: Theppitak Karoonboonyanan <thep@linux.thai.net> Date: Tue, 21 Sep 2010 07:54:11 +0000 Subject: [core] Initialize LayoutManager::display Uninitialized value caused problem with multi-row pager. https://bugzilla.gnome.org/show_bug.cgi?id=630229 --- diff --git a/libwnck/xutils.c b/libwnck/xutils.c index 33caa9e..92b9201 100644 --- a/libwnck/xutils.c +++ b/libwnck/xutils.c @@ -2604,6 +2604,7 @@ _wnck_try_desktop_layout_manager (Screen *xscreen, lm = g_slice_new0 (LayoutManager); + lm->display = display; lm->screen_number = number; lm->token = next_token; ++next_token; -- cgit v0.8.3.1Attachment: signature.asc
Description: This is a digitally signed message part
--- End Message ---
--- Begin Message ---
- To: Josselin Mouette <joss@debian.org>, 598865-done@bugs.debian.org
- Subject: Re: Bug#598865: unblock: libwnck/2.30.4-2
- From: Mehdi Dogguy <mehdi@dogguy.org>
- Date: Sun, 03 Oct 2010 16:58:27 +0200
- Message-id: <4CA89A13.4090801@dogguy.org>
- In-reply-to: <[🔎] 1286040152.6455.101.camel@tomoyo>
- References: <[🔎] 1286040152.6455.101.camel@tomoyo>
On 10/02/2010 07:22 PM, Josselin Mouette wrote:please unblock libwnck for squeeze.Unblocked. Regards, -- Mehdi Dogguy مهدي الدڤي http://dogguy.org/
--- End Message ---