2009-07-20 16:24:48 |
Chow Loong Jin |
description |
With a multihead configuration, left (primary) monitor being 1280x1024, and right monitor being 1280x800, aligned at their bases, notifications do not appear. This is because notify-osd places the notifications in the top right corner, which is not displayed by the secondary monitor, since it's aligned at the bases. The panel is at the top of the left monitor.
The reason for this is that notify-osd cannot detect the panel when libgtk 2.17.4 is installed, as shown by the following debug message:
(notify-osd:30917): Gdk-CRITICAL **: gdk_region_destroy: assertion `region != NULL' failed
** (notify-osd:30917): DEBUG: [2009-07-21T00:06:08-00:00, notify-send, id:0, icon:] bla
** (notify-osd:30917): DEBUG: selecting monitor 0 at (0,0) - 1280x1024
** (notify-osd:30917): DEBUG: no panel detetected; using workarea fallback
** (notify-osd:30917): DEBUG: top corner at: 2295, 23
The offending snippet of code is this:
/* discard dialog windows like panel properties or the applet directory... */
if (gdk_window_get_type_hint (win)
!= GDK_WINDOW_TYPE_HINT_DOCK)
goto failed;
For some reason, gdk_window_get_type_hint returns GDK_WINDOW_TYPE_HINT_NORMAL for all windows that don't belong to the calling application, and this broke notify-osd's method of looking for a panel. |
With a multihead configuration, left (primary) monitor being 1280x1024, and right monitor being 1280x800, aligned at their bases, notifications do not appear. This is because notify-osd places the notifications in the top right corner, which is not displayed by the secondary monitor, since it's aligned at the bases. The panel is at the top of the left monitor.
The reason for this is that notify-osd cannot detect the panel when libgtk 2.17.4 is installed, as shown by the following debug message:
(notify-osd:30917): Gdk-CRITICAL **: gdk_region_destroy: assertion `region != NULL' failed
** (notify-osd:30917): DEBUG: [2009-07-21T00:06:08-00:00, notify-send, id:0, icon:] bla
** (notify-osd:30917): DEBUG: selecting monitor 0 at (0,0) - 1280x1024
** (notify-osd:30917): DEBUG: no panel detetected; using workarea fallback
** (notify-osd:30917): DEBUG: top corner at: 2295, 23
The offending snippet of code is this (in _window_look_for_top_panel_attributes, in src/defaults.c):
/* discard dialog windows like panel properties or the applet directory... */
if (gdk_window_get_type_hint (win)
!= GDK_WINDOW_TYPE_HINT_DOCK)
goto failed;
For some reason, as of gtk 2.17.4, gdk_window_get_type_hint returns GDK_WINDOW_TYPE_HINT_NORMAL for all windows that don't belong to the calling application, and this broke notify-osd's method of looking for a panel.
The part of the code in GDK which causes GDK_WINDOW_TYPE_HINT_NORMAL to be returned is this (in gdk_window_get_type_hint(), in gdk/x11/gdkwindow-x11.c):
if (GDK_WINDOW_DESTROYED (window) ||
!WINDOW_IS_TOPLEVEL (window))
return GDK_WINDOW_TYPE_HINT_NORMAL; |
|