diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/canberra-gtk-module.c | 114 | 
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);  | 
