diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/msg.c | 17 | ||||
-rw-r--r-- | src/msg.h | 1 | ||||
-rw-r--r-- | src/panel.c | 1 | ||||
-rw-r--r-- | src/panel.h | 1 |
4 files changed, 20 insertions, 0 deletions
@@ -547,6 +547,22 @@ msg_win_create(MBPanel *panel, XFreePixmap(panel->dpy, mask); } +void +msg_cancel (MBPanel *panel, XClientMessageEvent *e) +{ + MBPanelApp *sender; + + if ((sender = panel_app_get_from_window(panel, e->window )) == NULL) + return; + + if (panel->msg_win + && panel->msg_win_sender == sender + && panel->msg_sender_id == e->data.l[2]) + { + XDestroyWindow(panel->dpy, panel->msg_win); + panel->msg_win = None; + } +} void msg_handle_events(MBPanel *panel, XEvent *e) @@ -566,6 +582,7 @@ msg_handle_events(MBPanel *panel, XEvent *e) panel->msg_starttime = msg->starttime; panel->msg_timeout = msg->timeout; panel->msg_win_sender = msg->sender; + panel->msg_sender_id = msg->id; panel->msg_has_context = False; @@ -16,5 +16,6 @@ void msg_destroy(MBPanel *d, MBPanelMessageQueue *m); void msg_add_data(MBPanel *d, XClientMessageEvent *e); void msg_handle_events(MBPanel *d, XEvent *e); void msg_handle_timeouts(MBPanel *d); +void msg_cancel(MBPanel *d, XClientMessageEvent *e); #endif diff --git a/src/panel.c b/src/panel.c index f20e134..5713e4d 100644 --- a/src/panel.c +++ b/src/panel.c @@ -886,6 +886,7 @@ panel_handle_client_message(MBPanel *panel, XClientMessageEvent *e) break; case SYSTEM_TRAY_CANCEL_MESSAGE: DBG("%s() is SYSTEM_TRAY_CANCEL_MESSAGE\n", __func__ ); + msg_cancel(panel, e); break; } return; diff --git a/src/panel.h b/src/panel.h index 20f6be6..7e54fa4 100644 --- a/src/panel.h +++ b/src/panel.h @@ -212,6 +212,7 @@ typedef struct _panel { int msg_timeout; MBPanelApp *msg_win_sender; Bool msg_has_context; + unsigned long msg_sender_id; int msg_context_y1, msg_context_y2; GC msg_gc; |