summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/canberra-gtk-module.c114
1 files changed, 69 insertions, 45 deletions
diff --git a/src/canberra-gtk-module.c b/src/canberra-gtk-module.c
index 08ef934..d61298b 100644
--- a/src/canberra-gtk-module.c
+++ b/src/canberra-gtk-module.c
@@ -100,8 +100,8 @@ static guint
signal_id_icon_view_selection_changed;
static GQuark
- disable_sound_quark,
- was_hidden_quark;
+ disable_sound_quark/* , */
+ /* was_hidden_quark */;
/* Make sure GCC doesn't warn us about a missing prototype for this
* exported function */
@@ -292,43 +292,47 @@ static SoundEventData* filter_sound_event(SoundEventData *d) {
return d;
}
-static gboolean is_hidden(GdkDisplay *d, GdkWindow *w) {
- Atom type_return;
- gint format_return;
- gulong nitems_return;
- gulong bytes_after_return;
- guchar *data = NULL;
- gboolean r = FALSE;
-
- if (XGetWindowProperty(GDK_DISPLAY_XDISPLAY(d), GDK_WINDOW_XID(w),
- gdk_x11_get_xatom_by_name_for_display(d, "_NET_WM_STATE"),
- 0, G_MAXLONG, False, XA_ATOM, &type_return,
- &format_return, &nitems_return, &bytes_after_return,
- &data) != Success)
- return FALSE;
-
- if (type_return == XA_ATOM && format_return == 32 && data) {
- unsigned i;
-
- for (i = 0; i < nitems_return; i++) {
- Atom atom = ((Atom*) data)[i];
-
- if (atom == gdk_x11_get_xatom_by_name_for_display(d, "_NET_WM_STATE_HIDDEN")) {
- r = TRUE;
- break;
- }
- }
- }
+/* static gboolean is_hidden(GdkDisplay *d, GdkWindow *w) { */
+/* Atom type_return; */
+/* gint format_return; */
+/* gulong nitems_return; */
+/* gulong bytes_after_return; */
+/* guchar *data = NULL; */
+/* gboolean r = FALSE; */
- if (type_return != None && data != NULL)
- XFree (data);
+/* if (XGetWindowProperty(GDK_DISPLAY_XDISPLAY(d), GDK_WINDOW_XID(w), */
+/* gdk_x11_get_xatom_by_name_for_display(d, "_NET_WM_STATE"), */
+/* 0, G_MAXLONG, False, XA_ATOM, &type_return, */
+/* &format_return, &nitems_return, &bytes_after_return, */
+/* &data) != Success) */
+/* return FALSE; */
- return r;
-}
+/* if (type_return == XA_ATOM && format_return == 32 && data) { */
+/* unsigned i; */
+
+/* for (i = 0; i < nitems_return; i++) { */
+/* Atom atom = ((Atom*) data)[i]; */
+
+
+/* g_debug("found %s", gdk_x11_get_xatom_name_for_display (d, atom)); */
+
+/* if (atom == gdk_x11_get_xatom_by_name_for_display(d, "_NET_WM_STATE_HIDDEN")) { */
+/* g_debug("found hidden atom"); */
+/* r = TRUE; */
+/* /\* break; *\/ */
+/* } */
+/* } */
+/* } */
+
+/* if (type_return != None && data != NULL) */
+/* XFree (data); */
+
+/* return r; */
+/* } */
static void dispatch_sound_event(SoundEventData *d) {
int ret = CA_SUCCESS;
- static gboolean menu_is_popped_up = TRUE;
+ static gboolean menu_is_popped_up = FALSE;
if (g_object_get_qdata(d->object, disable_sound_quark))
return;
@@ -343,7 +347,8 @@ static void dispatch_sound_event(SoundEventData *d) {
if (is_menu_hint(hint)) {
- if (menu_is_popped_up) {
+ if (!menu_is_popped_up) {
+
ret = ca_gtk_play_for_widget(GTK_WIDGET(d->object), 0,
CA_PROP_EVENT_ID, "menu-popup",
CA_PROP_EVENT_DESCRIPTION, "Menu popped up",
@@ -460,15 +465,23 @@ static void dispatch_sound_event(SoundEventData *d) {
if (GTK_IS_WINDOW(d->object) && d->signal_id == signal_id_widget_window_state_event) {
GdkEventWindowState *e;
- gboolean h, ph;
+ /* gboolean h, ph; */
e = (GdkEventWindowState*) d->event;
- h = is_hidden(gdk_screen_get_display(gdk_event_get_screen(d->event)), e->window);
- ph = !!g_object_get_qdata(d->object, was_hidden_quark);
- g_object_set_qdata(d->object, was_hidden_quark, GINT_TO_POINTER(h));
+ /* g_message("aussen"); */
+
+ /* h = is_hidden(gdk_screen_get_display(gdk_event_get_screen(d->event)), e->window); */
+ /* ph = !!g_object_get_qdata(d->object, was_hidden_quark); */
+ /* g_object_set_qdata(d->object, was_hidden_quark, GINT_TO_POINTER(h)); */
+
+ /* g_message("%i %i %i %i", */
+ /* !!(e->changed_mask & GDK_WINDOW_STATE_ICONIFIED), */
+ /* !!(e->new_window_state & GDK_WINDOW_STATE_ICONIFIED), */
+ /* !!h, */
+ /* !!ph); */
- if ((e->changed_mask & GDK_WINDOW_STATE_ICONIFIED) && (e->new_window_state & GDK_WINDOW_STATE_ICONIFIED) && h && !ph) {
+ if ((e->changed_mask & GDK_WINDOW_STATE_ICONIFIED) && (e->new_window_state & GDK_WINDOW_STATE_ICONIFIED) /*&& h && !ph*/) {
ret = ca_gtk_play_for_widget(GTK_WIDGET(d->object), 0,
CA_PROP_EVENT_ID, "window-minimized",
@@ -484,7 +497,7 @@ static void dispatch_sound_event(SoundEventData *d) {
CA_PROP_CANBERRA_CACHE_CONTROL, "permanent",
NULL);
- } else if ((e->changed_mask & GDK_WINDOW_STATE_ICONIFIED) && !(e->new_window_state & GDK_WINDOW_STATE_ICONIFIED) && ph) {
+ } else if ((e->changed_mask & GDK_WINDOW_STATE_ICONIFIED) && !(e->new_window_state & GDK_WINDOW_STATE_ICONIFIED) /* && ph */) {
ret = ca_gtk_play_for_widget(GTK_WIDGET(d->object), 0,
CA_PROP_EVENT_ID, "window-unminimized",
@@ -628,11 +641,9 @@ static void dispatch_sound_event(SoundEventData *d) {
/* g_warning("Failed to play event sound: %s", ca_strerror(ret)); */
}
-static gboolean idle_cb(void *userdata) {
+static void dispatch_queue(void) {
SoundEventData *d;
- idle_id = 0;
-
while ((d = g_queue_pop_head(&sound_event_queue))) {
if (!(d = filter_sound_event(d)))
@@ -643,6 +654,12 @@ static gboolean idle_cb(void *userdata) {
dispatch_sound_event(d);
free_sound_event(d);
}
+}
+
+static gboolean idle_cb(void *userdata) {
+ idle_id = 0;
+
+ dispatch_queue();
return FALSE;
}
@@ -742,11 +759,16 @@ static void connect_settings(void) {
connected = TRUE;
}
+static gboolean quit_handler(gpointer data) {
+ dispatch_queue();
+ return FALSE;
+}
+
G_MODULE_EXPORT void gtk_module_init(gint *argc, gchar ***argv[]) {
/* This is the same quark libgnomeui uses! */
disable_sound_quark = g_quark_from_string("gnome_disable_sound_events");
- was_hidden_quark = g_quark_from_string("canberra_was_hidden");
+ /* was_hidden_quark = g_quark_from_string("canberra_was_hidden"); */
/* Hook up the gtk setting */
connect_settings();
@@ -763,6 +785,8 @@ G_MODULE_EXPORT void gtk_module_init(gint *argc, gchar ***argv[]) {
install_hook(GTK_TYPE_NOTEBOOK, "switch-page", &signal_id_notebook_switch_page);
install_hook(GTK_TYPE_TREE_VIEW, "cursor-changed", &signal_id_tree_view_cursor_changed);
install_hook(GTK_TYPE_ICON_VIEW, "selection-changed", &signal_id_icon_view_selection_changed);
+
+ gtk_quit_add(1, quit_handler, NULL);
}
G_MODULE_EXPORT gchar* g_module_check_init(GModule *module);