diff options
author | Havoc Pennington <hp@redhat.com> | 2002-10-21 04:31:14 +0000 |
---|---|---|
committer | Havoc Pennington <hp@redhat.com> | 2002-10-21 04:31:14 +0000 |
commit | ae1364a79ff0148eb3572c22552bfb23226329ef (patch) | |
tree | e34236d940ae8475ea904ba8b65853d804250218 /libsn | |
parent | ed9872e7a110260f4bf7f4e9f2b0132f3528c1f6 (diff) | |
download | startup-notification-ae1364a79ff0148eb3572c22552bfb23226329ef.tar.gz |
Add "SCREEN" property, and note that there may be a max message size.
fix the escaping
Diffstat (limited to 'libsn')
-rw-r--r-- | libsn/sn-launcher.c | 2 | ||||
-rw-r--r-- | libsn/sn-monitor.c | 9 | ||||
-rw-r--r-- | libsn/sn-xmessages.c | 34 | ||||
-rw-r--r-- | libsn/sn-xmessages.h | 1 |
4 files changed, 21 insertions, 25 deletions
diff --git a/libsn/sn-launcher.c b/libsn/sn-launcher.c index 3e27d35..c206863 100644 --- a/libsn/sn-launcher.c +++ b/libsn/sn-launcher.c @@ -261,6 +261,8 @@ sn_launcher_context_initiate (SnLauncherContext *context, (const char**) names, (const char**) values); + printf ("Sending '%s'\n", message); + sn_internal_broadcast_xmessage (context->display, context->screen, "_NET_STARTUP_INFO", diff --git a/libsn/sn-monitor.c b/libsn/sn-monitor.c index c3f3f1a..e38d10c 100644 --- a/libsn/sn-monitor.c +++ b/libsn/sn-monitor.c @@ -45,7 +45,6 @@ struct SnMonitorEvent SnMonitorEventType type; SnMonitorContext *context; SnStartupSequence *sequence; - Window xwindow; /* where event occurred */ }; struct SnStartupSequence @@ -79,7 +78,6 @@ static int next_sequence_serial = 0; static void xmessage_func (SnDisplay *display, const char *message_type, - Window xwindow, const char *message, void *user_data); @@ -223,7 +221,6 @@ sn_monitor_event_copy (SnMonitorEvent *event) copy->sequence = event->sequence; if (copy->sequence) sn_startup_sequence_ref (copy->sequence); - copy->xwindow = event->xwindow; return copy; } @@ -570,7 +567,6 @@ unref_event_foreach (void *value, static void xmessage_func (SnDisplay *display, const char *message_type, - Window xwindow, const char *message, void *user_data) { @@ -626,7 +622,6 @@ xmessage_func (SnDisplay *display, event->type = SN_MONITOR_EVENT_INITIATED; event->context = NULL; event->sequence = sequence; /* ref from add_sequence goes here */ - event->xwindow = xwindow; sn_list_append (events, event); } @@ -696,7 +691,7 @@ xmessage_func (SnDisplay *display, ++i; } - if (changed) + if (changed && strcmp (prefix, "new") != 0) { SnMonitorEvent *event; @@ -707,7 +702,6 @@ xmessage_func (SnDisplay *display, event->context = NULL; event->sequence = sequence; sn_startup_sequence_ref (sequence); - event->xwindow = xwindow; sn_list_append (events, event); } @@ -723,7 +717,6 @@ xmessage_func (SnDisplay *display, event->context = NULL; event->sequence = sequence; sn_startup_sequence_ref (sequence); - event->xwindow = xwindow; sn_list_append (events, event); } diff --git a/libsn/sn-xmessages.c b/libsn/sn-xmessages.c index f5225db..794e86f 100644 --- a/libsn/sn-xmessages.c +++ b/libsn/sn-xmessages.c @@ -234,10 +234,9 @@ handler_for_atom_foreach (void *value, { SnXmessageHandler *handler = value; HandlerForAtomData *hfad = data; - + if (handler->xdisplay == hfad->xdisplay && - handler->type_atom == hfad->atom && - handler->root == hfad->xwindow) + handler->type_atom == hfad->atom) { hfad->found_handler = TRUE; return FALSE; @@ -278,11 +277,9 @@ find_message_foreach (void *value, { SnXmessage *message = value; FindMessageData *fmd = data; - - if (fmd->xevent->xclient.window == - message->xwindow && - fmd->xevent->xclient.message_type == - message->type_atom) + + if (fmd->xevent->xclient.window == message->xwindow && + fmd->xevent->xclient.message_type == message->type_atom) { fmd->message = message; return FALSE; @@ -318,7 +315,9 @@ add_event_to_messages (SnDisplay *display, if (message == NULL) { - /* Create a new message */ + if (xevent->xclient.data.b[0] != '\0') /* if no nul byte, not a start */ + return NULL; + message = sn_new0 (SnXmessage, 1); message->type_atom = xevent->xclient.message_type; @@ -343,11 +342,14 @@ add_event_to_messages (SnDisplay *display, src = &xevent->xclient.data.b[0]; src_end = src + 20; + + if (message->message == NULL) + ++src; /* skip initial nul byte */ message->message = sn_realloc (message->message, - message->allocated + 20); + message->allocated + (src_end - src)); dest = message->message + message->allocated; - message->allocated += 20; + message->allocated += (src_end - src); completed = FALSE; @@ -355,7 +357,7 @@ add_event_to_messages (SnDisplay *display, while (src != src_end) { *dest = *src; - + if (*src == '\0') { completed = TRUE; @@ -391,7 +393,6 @@ dispatch_message_foreach (void *value, (* handler->func) (mdd->display, handler->message_type, - mdd->message->xwindow, mdd->message->message, handler->func_data); @@ -414,7 +415,7 @@ sn_internal_xmessage_process_event (SnDisplay *display, if (some_handler_handles_event (display, xevent)) { retval = TRUE; - + message = add_event_to_messages (display, xevent); } break; @@ -504,11 +505,12 @@ sn_internal_serialize_message (const char *prefix, retval = NULL; sn_internal_append_to_string (&retval, &len, prefix); - sn_internal_append_to_string (&retval, &len, ": "); + sn_internal_append_to_string (&retval, &len, ":"); i = 0; while (property_names[i]) { + sn_internal_append_to_string (&retval, &len, " "); sn_internal_append_to_string (&retval, &len, property_names[i]); sn_internal_append_to_string (&retval, &len, "="); sn_internal_append_to_string_escaped (&retval, &len, property_values[i]); @@ -595,7 +597,7 @@ unescape_string_inplace (char *str, quoted = FALSE; while (*s) - { + { if (escaped) { escaped = FALSE; diff --git a/libsn/sn-xmessages.h b/libsn/sn-xmessages.h index 57b933b..080a970 100644 --- a/libsn/sn-xmessages.h +++ b/libsn/sn-xmessages.h @@ -31,7 +31,6 @@ SN_BEGIN_DECLS typedef void (* SnXmessageFunc) (SnDisplay *display, const char *message_type, - Window message_window, const char *message, void *user_data); |