summaryrefslogtreecommitdiff
path: root/src/display.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/display.c')
-rw-r--r--src/display.c29
1 files changed, 27 insertions, 2 deletions
diff --git a/src/display.c b/src/display.c
index 87a3bfb4..f9fb8ef5 100644
--- a/src/display.c
+++ b/src/display.c
@@ -78,7 +78,8 @@ meta_display_open (const char *name)
"WM_PROTOCOLS",
"WM_TAKE_FOCUS",
"WM_DELETE_WINDOW",
- "WM_STATE"
+ "WM_STATE",
+ "_NET_CLOSE_WINDOW"
};
Atom atoms[G_N_ELEMENTS(atom_names)];
@@ -155,6 +156,7 @@ meta_display_open (const char *name)
display->atom_wm_take_focus = atoms[2];
display->atom_wm_delete_window = atoms[3];
display->atom_wm_state = atoms[4];
+ display->atom_net_close_window = atoms[5];
/* Now manage all existing windows */
tmp = display->screens;
@@ -494,6 +496,18 @@ event_queue_callback (MetaEventQueue *queue,
case ColormapNotify:
break;
case ClientMessage:
+ if (window)
+ {
+ if (event->xclient.message_type ==
+ display->atom_net_close_window)
+ {
+ /* I think the wm spec should maybe put a time
+ * in this message, CurrentTime here is sort of
+ * bogus. But it rarely matters most likely.
+ */
+ meta_window_delete (window, CurrentTime);
+ }
+ }
break;
case MappingNotify:
break;
@@ -708,7 +722,18 @@ meta_spew_event (MetaDisplay *display,
name = "ColormapNotify";
break;
case ClientMessage:
- name = "ClientMessage";
+ {
+ char *str;
+ name = "ClientMessage";
+ meta_error_trap_push (display);
+ str = XGetAtomName (display->xdisplay,
+ event->xclient.message_type);
+ meta_error_trap_pop (display);
+ extra = g_strdup_printf ("type: %s format: %d\n",
+ str ? str : "(unknown atom)",
+ event->xclient.format);
+ XFree (str);
+ }
break;
case MappingNotify:
name = "MappingNotify";