Automatically create a hidden window for messages if necessary
This commit is contained in:
parent
cbad687d78
commit
ee2e84a811
|
@ -32,6 +32,7 @@
|
||||||
/* types */
|
/* types */
|
||||||
typedef struct _MessageCallback
|
typedef struct _MessageCallback
|
||||||
{
|
{
|
||||||
|
GtkWidget * widget;
|
||||||
Window window;
|
Window window;
|
||||||
DesktopMessageCallback callback;
|
DesktopMessageCallback callback;
|
||||||
void * data;
|
void * data;
|
||||||
|
@ -59,6 +60,14 @@ int desktop_message_register(GtkWidget * window, char const * destination,
|
||||||
/* XXX memory leak */
|
/* XXX memory leak */
|
||||||
if((mc = object_new(sizeof(*mc))) == NULL)
|
if((mc = object_new(sizeof(*mc))) == NULL)
|
||||||
return -1;
|
return -1;
|
||||||
|
if(window == NULL)
|
||||||
|
{
|
||||||
|
window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
|
||||||
|
mc->widget = window;
|
||||||
|
gtk_widget_realize(window);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
mc->widget = NULL;
|
||||||
w = gtk_widget_get_window(window);
|
w = gtk_widget_get_window(window);
|
||||||
mc->window = GDK_WINDOW_XWINDOW(w);
|
mc->window = GDK_WINDOW_XWINDOW(w);
|
||||||
mc->callback = callback;
|
mc->callback = callback;
|
||||||
|
@ -121,6 +130,8 @@ static GdkFilterReturn _desktop_message_on_callback(GdkXEvent * xevent,
|
||||||
value3 = xcme->data.l[2];
|
value3 = xcme->data.l[2];
|
||||||
if(mc->callback(mc->data, value1, value2, value3) == 0)
|
if(mc->callback(mc->data, value1, value2, value3) == 0)
|
||||||
return GDK_FILTER_CONTINUE;
|
return GDK_FILTER_CONTINUE;
|
||||||
|
if(mc->widget != NULL)
|
||||||
|
gtk_widget_destroy(mc->widget);
|
||||||
object_delete(mc);
|
object_delete(mc);
|
||||||
return GDK_FILTER_REMOVE;
|
return GDK_FILTER_REMOVE;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue
Block a user