summaryrefslogtreecommitdiff
path: root/libsn
diff options
context:
space:
mode:
authorHavoc Pennington <hp@redhat.com>2002-10-21 04:31:14 +0000
committerHavoc Pennington <hp@redhat.com>2002-10-21 04:31:14 +0000
commitae1364a79ff0148eb3572c22552bfb23226329ef (patch)
treee34236d940ae8475ea904ba8b65853d804250218 /libsn
parented9872e7a110260f4bf7f4e9f2b0132f3528c1f6 (diff)
downloadstartup-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.c2
-rw-r--r--libsn/sn-monitor.c9
-rw-r--r--libsn/sn-xmessages.c34
-rw-r--r--libsn/sn-xmessages.h1
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);