diff options
Diffstat (limited to 'stickynotes/stickynotes_applet_callbacks.c')
-rw-r--r-- | stickynotes/stickynotes_applet_callbacks.c | 130 |
1 files changed, 78 insertions, 52 deletions
diff --git a/stickynotes/stickynotes_applet_callbacks.c b/stickynotes/stickynotes_applet_callbacks.c index e643dcb7..80024e4a 100644 --- a/stickynotes/stickynotes_applet_callbacks.c +++ b/stickynotes/stickynotes_applet_callbacks.c @@ -25,34 +25,6 @@ #include <X11/Xatom.h> #include <gdk/gdkx.h> -static gboolean get_desktop_window (Window *window) -{ - Window *desktop_window; - GdkWindow *root_window; - GdkAtom type_returned; - int format_returned; - int length_returned; - - root_window = gdk_screen_get_root_window (gdk_screen_get_default ()); - - if (gdk_property_get (root_window, - gdk_atom_intern ("CAJA_DESKTOP_WINDOW_ID", FALSE), - gdk_x11_xatom_to_atom (XA_WINDOW), - 0, 4, FALSE, - &type_returned, - &format_returned, - &length_returned, - (guchar**) &desktop_window)) { - *window = *desktop_window; - g_free (desktop_window); - return TRUE; - } - else { - *window = 0; - return FALSE; - } -} - static void popup_add_note (StickyNotesApplet *applet, GtkWidget *item) @@ -67,6 +39,10 @@ stickynote_show_notes (gboolean visible) GList *l; if (stickynotes->visible == visible) return; + + if (g_settings_get_boolean (stickynotes->settings, "click-hide") && !visible) + return; + stickynotes->visible = visible; for (l = stickynotes->notes; l; l = l->next) { @@ -141,6 +117,35 @@ applet_focus_cb (GtkWidget *widget, return FALSE; } +#ifdef GDK_WINDOWING_X11 +static gboolean get_desktop_window (GdkScreen *screen, Window *window) +{ + Window *desktop_window; + GdkWindow *root_window; + GdkAtom type_returned; + int format_returned; + int length_returned; + + root_window = gdk_screen_get_root_window (screen); + + if (gdk_property_get (root_window, + gdk_atom_intern ("CAJA_DESKTOP_WINDOW_ID", FALSE), + gdk_x11_xatom_to_atom (XA_WINDOW), + 0, 4, FALSE, + &type_returned, + &format_returned, + &length_returned, + (guchar**) &desktop_window)) { + *window = *desktop_window; + g_free (desktop_window); + return TRUE; + } + else { + *window = 0; + return FALSE; + } +} + static GdkFilterReturn desktop_window_event_filter (GdkXEvent *xevent, GdkEvent *event, @@ -155,22 +160,37 @@ desktop_window_event_filter (GdkXEvent *xevent, } return GDK_FILTER_CONTINUE; } +#endif /* GDK_WINDOWING_X11 */ -void install_check_click_on_desktop (void) +void install_check_click_on_desktop (GdkScreen *screen) { +#ifdef GDK_WINDOWING_X11 Window desktop_window; GdkWindow *window; Atom user_time_window; Atom user_time; + GdkDisplay *display; + + display = gdk_screen_get_display (screen); + /* All this uses X11-only APIs and features */ + if (!GDK_IS_X11_DISPLAY (display)) + return; - if (!get_desktop_window (&desktop_window)) { + if (!get_desktop_window (screen, &desktop_window)) { return; } /* Access the desktop window. desktop_window is the root window for the - * default screen, so we know using gdk_display_get_default () is correct. */ - window = gdk_x11_window_foreign_new_for_display (gdk_display_get_default (), - desktop_window); + * default screen, so we know using gdk_display_get_default () is correct. + * This code should not be reached if running in wayland + */ + window = gdk_x11_window_foreign_new_for_display (display, desktop_window); + + /* Avoid crash if the desktop window ID is set but invalid, e.g. if + * Caja has set it but quit since then */ + if (!window) { + return; + } /* It may contain an atom to tell us which other window to monitor */ user_time_window = gdk_x11_get_xatom_by_name ("_NET_WM_USER_TIME_WINDOW"); @@ -207,6 +227,7 @@ void install_check_click_on_desktop (void) gdk_window_set_events (window, GDK_PROPERTY_CHANGE_MASK); gdk_window_add_filter (window, desktop_window_event_filter, NULL); +#endif } /* Applet Callback : Change the panel orientation. */ @@ -383,8 +404,7 @@ menu_help_cb (GtkAction *action, _("There was an error displaying help: %s"), error->message); - g_signal_connect (dialog, - "response", + g_signal_connect (dialog, "response", G_CALLBACK (gtk_widget_destroy), NULL); @@ -425,7 +445,7 @@ menu_about_cb (GtkAction *action, "version", VERSION, "copyright", _("Copyright \xc2\xa9 2002-2003 Loban A Rahman\n" "Copyright \xc2\xa9 2005 Davyd Madeley\n" - "Copyright \xc2\xa9 2012-2020 MATE developers"), + "Copyright \xc2\xa9 2012-2021 MATE developers"), "comments", _("Sticky Notes for the " "MATE Desktop Environment"), "authors", authors, @@ -439,18 +459,26 @@ menu_about_cb (GtkAction *action, void preferences_save_cb (gpointer data) { - gint width = gtk_adjustment_get_value (stickynotes->w_prefs_width); - gint height = gtk_adjustment_get_value (stickynotes->w_prefs_height); - gboolean sys_color = - gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (stickynotes->w_prefs_sys_color)); - gboolean sys_font = - gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (stickynotes->w_prefs_sys_font)); - gboolean sticky = - gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (stickynotes->w_prefs_sticky)); - gboolean force_default = - gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (stickynotes->w_prefs_force)); - gboolean desktop_hide = - gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (stickynotes->w_prefs_desktop)); + gint width; + gint height; + gboolean sys_color; + gboolean sys_font; + gboolean sticky; + gboolean force_default; + gboolean desktop_hide; + gdouble adjustment_value; + + adjustment_value = gtk_adjustment_get_value (stickynotes->w_prefs_width); + width = (gint) adjustment_value; + + adjustment_value = gtk_adjustment_get_value (stickynotes->w_prefs_height); + height = (gint) adjustment_value; + + sys_color = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (stickynotes->w_prefs_sys_color)); + sys_font = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (stickynotes->w_prefs_sys_font)); + sticky = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (stickynotes->w_prefs_sticky)); + force_default = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (stickynotes->w_prefs_force)); + desktop_hide = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (stickynotes->w_prefs_desktop)); if (g_settings_is_writable (stickynotes->settings, "default-width")) @@ -612,12 +640,10 @@ preferences_response_cb (GtkWidget *dialog, _("There was an error displaying help: %s"), error->message); - g_signal_connect (G_OBJECT (dialog), - "response", + g_signal_connect (dialog, "response", G_CALLBACK (gtk_widget_destroy), NULL); - gtk_window_set_resizable (GTK_WINDOW (dialog), - FALSE); + gtk_window_set_resizable (GTK_WINDOW (dialog), FALSE); gtk_window_set_screen (GTK_WINDOW (dialog), gtk_widget_get_screen (GTK_WIDGET (dialog))); gtk_widget_show (dialog); |