[gnome-applets] sticky-notes: move applet callbacks to sticky-notes-applet.c
- From: Alberts Muktupāvels <muktupavels src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-applets] sticky-notes: move applet callbacks to sticky-notes-applet.c
- Date: Tue, 7 Apr 2020 00:52:41 +0000 (UTC)
commit d4cd17e309f8eb47a841890c5612739da578bfad
Author: Alberts Muktupāvels <alberts muktupavels gmail com>
Date: Tue Apr 7 01:43:35 2020 +0300
sticky-notes: move applet callbacks to sticky-notes-applet.c
gnome-applets/sticky-notes/Makefile.am | 2 -
.../sticky-notes/sticky-notes-applet-callbacks.c | 416 ---------------------
.../sticky-notes/sticky-notes-applet-callbacks.h | 43 ---
gnome-applets/sticky-notes/sticky-notes-applet.c | 411 +++++++++++++++++++-
po/POTFILES.in | 1 -
5 files changed, 407 insertions(+), 466 deletions(-)
---
diff --git a/gnome-applets/sticky-notes/Makefile.am b/gnome-applets/sticky-notes/Makefile.am
index c6bf5bcb0..2fdbbbd92 100644
--- a/gnome-applets/sticky-notes/Makefile.am
+++ b/gnome-applets/sticky-notes/Makefile.am
@@ -22,8 +22,6 @@ libsticky_notes_applet_la_SOURCES = \
sticky-notes.h \
sticky-notes-applet.c \
sticky-notes-applet.h \
- sticky-notes-applet-callbacks.c \
- sticky-notes-applet-callbacks.h \
sticky-notes-preferences.c \
sticky-notes-preferences.h \
util.c \
diff --git a/gnome-applets/sticky-notes/sticky-notes-applet.c
b/gnome-applets/sticky-notes/sticky-notes-applet.c
index af2c1ea38..98d7e9dd5 100644
--- a/gnome-applets/sticky-notes/sticky-notes-applet.c
+++ b/gnome-applets/sticky-notes/sticky-notes-applet.c
@@ -18,16 +18,16 @@
#include "config.h"
#include "sticky-notes-applet.h"
+#include <gdk/gdkx.h>
+#include <glib/gi18n-lib.h>
+#include <gtk/gtk.h>
#include <string.h>
+#include <X11/Xatom.h>
-#include "sticky-notes-applet-callbacks.h"
#include "sticky-notes.h"
#include "sticky-notes-preferences.h"
#include "gsettings.h"
-#include <glib/gi18n-lib.h>
-#include <gtk/gtk.h>
-
G_DEFINE_TYPE (StickyNotesApplet, sticky_notes_applet, GP_TYPE_APPLET)
StickyNotes *stickynotes = NULL;
@@ -35,6 +35,127 @@ StickyNotes *stickynotes = NULL;
static void sticky_notes_init (GpApplet *applet);
static void sticky_notes_applet_new (StickyNotesApplet *self);
+static void
+popup_add_note (StickyNotesApplet *applet)
+{
+ stickynotes_add (gtk_widget_get_screen (GTK_WIDGET (applet)));
+}
+
+static void
+stickynote_show_notes (gboolean visible)
+{
+ StickyNote *note;
+ GList *l;
+
+ if (stickynotes->visible == visible) return;
+ stickynotes->visible = visible;
+
+ for (l = stickynotes->notes; l; l = l->next)
+ {
+ note = l->data;
+ stickynote_set_visible (note, visible);
+ }
+}
+
+static void
+stickynote_toggle_notes_visible (void)
+{
+ stickynote_show_notes(!stickynotes->visible);
+}
+
+static void
+menu_new_note_cb (GSimpleAction *action,
+ GVariant *parameter,
+ gpointer user_data)
+{
+ StickyNotesApplet *applet = (StickyNotesApplet *) user_data;
+ popup_add_note (applet);
+}
+
+static void
+menu_hide_notes_cb (GSimpleAction *action,
+ GVariant *parameter,
+ gpointer user_data)
+{
+ stickynote_show_notes (FALSE);
+}
+
+static void
+menu_toggle_lock_cb (GSimpleAction *action,
+ GVariant *parameter,
+ gpointer user_data)
+{
+ GVariant *state = g_action_get_state (G_ACTION (action));
+ g_action_change_state (G_ACTION (action), g_variant_new_boolean (!g_variant_get_boolean (state)));
+ g_variant_unref (state);
+}
+
+static void
+menu_toggle_lock_state (GSimpleAction *action,
+ GVariant *value,
+ gpointer user_data)
+{
+ gboolean locked = g_variant_get_boolean (value);
+
+ if (g_settings_is_writable (stickynotes->settings, KEY_LOCKED))
+ g_settings_set_boolean (stickynotes->settings, KEY_LOCKED, locked);
+}
+
+static void
+destroy_all_response_cb (GtkDialog *dialog,
+ gint id,
+ StickyNotesApplet *applet)
+{
+ if (id == GTK_RESPONSE_OK) {
+ while (g_list_length(stickynotes->notes) > 0) {
+ StickyNote *note = g_list_nth_data(stickynotes->notes, 0);
+ stickynote_free(note);
+ stickynotes->notes = g_list_remove(stickynotes->notes, note);
+ }
+ }
+
+ stickynotes_applet_update_tooltips();
+ stickynotes_save();
+
+ gtk_widget_destroy (GTK_WIDGET (dialog));
+ applet->destroy_all_dialog = NULL;
+}
+
+static void
+menu_destroy_all_cb (GSimpleAction *action,
+ GVariant *parameter,
+ gpointer user_data)
+{
+ StickyNotesApplet *applet = (StickyNotesApplet *) user_data;
+ GtkBuilder *builder;
+
+ builder = gtk_builder_new ();
+ gtk_builder_add_from_resource (builder,
+ GRESOURCE_PREFIX "/ui/sticky-notes-delete-all.ui",
+ NULL);
+
+ if (applet->destroy_all_dialog != NULL) {
+ gtk_window_set_screen (GTK_WINDOW (applet->destroy_all_dialog),
+ gtk_widget_get_screen (GTK_WIDGET (applet)));
+
+ gtk_window_present (GTK_WINDOW (applet->destroy_all_dialog));
+ return;
+ }
+
+ applet->destroy_all_dialog = GTK_WIDGET (gtk_builder_get_object (builder, "delete_all_dialog"));
+
+ g_object_unref (builder);
+
+ g_signal_connect (applet->destroy_all_dialog, "response",
+ G_CALLBACK (destroy_all_response_cb),
+ applet);
+
+ gtk_window_set_screen (GTK_WINDOW (applet->destroy_all_dialog),
+ gtk_widget_get_screen (GTK_WIDGET (applet)));
+
+ gtk_widget_show_all (applet->destroy_all_dialog);
+}
+
static void
preferences_response_cb (GtkWidget *widget,
gint response_id,
@@ -194,6 +315,176 @@ stickynotes_make_prelight_icon (GdkPixbuf *dest, GdkPixbuf *src, int shift)
}
}
+static void
+preferences_apply_cb (GSettings *settings,
+ const gchar *key,
+ gpointer user_data)
+{
+ GList *l;
+ StickyNote *note;
+
+ if (!strcmp (key, KEY_STICKY))
+ {
+ if (g_settings_get_boolean (settings, key))
+ for (l = stickynotes->notes; l; l = l->next)
+ {
+ note = l->data;
+ gtk_window_stick (GTK_WINDOW (note->w_window));
+ }
+ else
+ for (l= stickynotes->notes; l; l = l->next)
+ {
+ note = l->data;
+ gtk_window_unstick (GTK_WINDOW (
+ note->w_window));
+ }
+ }
+
+ else if (!strcmp (key, KEY_LOCKED))
+ {
+ for (l = stickynotes->notes; l; l = l->next)
+ {
+ note = l->data;
+ stickynote_set_locked (note, g_settings_get_boolean (settings, key));
+ }
+ stickynotes_save();
+ }
+
+ else if (!strcmp (key, KEY_USE_SYSTEM_COLOR) ||
+ !strcmp (key, KEY_DEFAULT_FONT_COLOR) ||
+ !strcmp (key, KEY_DEFAULT_COLOR))
+ {
+ for (l = stickynotes->notes; l; l = l->next)
+ {
+ note = l->data;
+ stickynote_set_color (note,
+ note->color, note->font_color,
+ FALSE);
+ }
+ }
+
+ else if (!strcmp (key, KEY_USE_SYSTEM_FONT) ||
+ !strcmp (key, KEY_DEFAULT_FONT))
+ {
+ for (l = stickynotes->notes; l; l = l->next)
+ {
+ note = l->data;
+ stickynote_set_font (note, note->font, FALSE);
+ }
+ }
+
+ else if (!strcmp (key, KEY_FORCE_DEFAULT))
+ {
+ for (l = stickynotes->notes; l; l = l->next)
+ {
+ note = l->data;
+ stickynote_set_color(note,
+ note->color, note->font_color,
+ FALSE);
+ stickynote_set_font(note, note->font, FALSE);
+ }
+ }
+
+ stickynotes_applet_update_menus();
+}
+
+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 ("NAUTILUS_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,
+ gpointer data)
+{
+ gboolean desktop_hide = g_settings_get_boolean (stickynotes->settings, KEY_DESKTOP_HIDE);
+ if (desktop_hide &&
+ (((XEvent*)xevent)->xany.type == PropertyNotify) &&
+ (((XEvent*)xevent)->xproperty.atom == gdk_x11_get_xatom_by_name ("_NET_WM_USER_TIME"))) {
+ stickynote_show_notes (FALSE);
+ }
+ return GDK_FILTER_CONTINUE;
+}
+
+static void
+install_check_click_on_desktop (void)
+{
+ Window desktop_window;
+ GdkWindow *window;
+ Atom user_time_window;
+ Atom user_time;
+
+ if (!get_desktop_window (&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);
+
+ /* 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");
+ user_time = gdk_x11_get_xatom_by_name ("_NET_WM_USER_TIME");
+ if (user_time != None && user_time_window != None)
+ {
+ /* Looks like the atoms are there */
+ Atom actual_type;
+ int actual_format;
+ gulong nitems;
+ gulong bytes;
+ Window *data;
+
+ /* We only use this extra property if the actual user-time property's missing */
+ XGetWindowProperty (GDK_DISPLAY_XDISPLAY (gdk_window_get_display (window)), desktop_window,
user_time,
+ 0, 4, False, AnyPropertyType, &actual_type, &actual_format,
+ &nitems, &bytes, (unsigned char **)&data );
+ if (actual_type == None)
+ {
+ /* No user-time property, so look for the user-time-window */
+ XGetWindowProperty (GDK_DISPLAY_XDISPLAY (gdk_window_get_display (window)),
desktop_window, user_time_window,
+ 0, 4, False, AnyPropertyType, &actual_type, &actual_format,
+ &nitems, &bytes, (unsigned char **)&data );
+ if (actual_type != None)
+ {
+ /* We have another window to monitor */
+ desktop_window = *data;
+ window = gdk_x11_window_foreign_new_for_display (gdk_window_get_display
(window),
+ desktop_window);
+ }
+ }
+ }
+
+ gdk_window_set_events (window, GDK_PROPERTY_CHANGE_MASK);
+ gdk_window_add_filter (window, desktop_window_event_filter, NULL);
+}
+
/* Create and initalize global sticky notes instance */
static void
sticky_notes_init (GpApplet *applet)
@@ -219,6 +510,118 @@ sticky_notes_init (GpApplet *applet)
install_check_click_on_desktop ();
}
+static gboolean
+applet_button_cb (GtkWidget *widget,
+ GdkEventButton *event,
+ StickyNotesApplet *applet)
+{
+ if (event->type == GDK_2BUTTON_PRESS)
+ {
+ popup_add_note (applet);
+ return TRUE;
+ }
+ else if (event->button == 1)
+ {
+ stickynote_toggle_notes_visible ();
+ return TRUE;
+ }
+
+ return FALSE;
+}
+
+static gboolean
+applet_key_cb (GtkWidget *widget,
+ GdkEventKey *event,
+ StickyNotesApplet *applet)
+{
+ switch (event->keyval)
+ {
+ case GDK_KEY_KP_Space:
+ case GDK_KEY_space:
+ case GDK_KEY_KP_Enter:
+ case GDK_KEY_Return:
+ stickynote_show_notes (TRUE);
+ return TRUE;
+
+ default:
+ break;
+ }
+ return FALSE;
+}
+
+static gboolean
+applet_focus_cb (GtkWidget *widget,
+ GdkEventFocus *event,
+ StickyNotesApplet *applet)
+{
+ stickynotes_applet_update_icon(applet);
+
+ return FALSE;
+}
+
+static gboolean
+applet_cross_cb (GtkWidget *widget,
+ GdkEventCrossing *event,
+ StickyNotesApplet *applet)
+{
+ applet->prelighted = event->type == GDK_ENTER_NOTIFY || gtk_widget_has_focus(widget);
+
+ stickynotes_applet_update_icon(applet);
+
+ return FALSE;
+}
+
+static void
+applet_size_allocate_cb (GtkWidget *widget,
+ GtkAllocation *allocation,
+ StickyNotesApplet *applet)
+{
+ if (applet->panel_orient == GTK_ORIENTATION_HORIZONTAL) {
+ if (applet->panel_size == allocation->height)
+ return;
+ applet->panel_size = allocation->height;
+ } else {
+ if (applet->panel_size == allocation->width)
+ return;
+ applet->panel_size = allocation->width;
+ }
+
+ stickynotes_applet_update_icon(applet);
+}
+
+static void
+applet_placement_changed_cb (GpApplet *applet,
+ GtkOrientation orientation,
+ GtkPositionType position,
+ StickyNotesApplet *self)
+{
+ self->panel_orient = orientation;
+}
+
+static void
+applet_destroy_cb (GtkWidget *widget,
+ StickyNotesApplet *applet)
+{
+ GList *notes;
+
+ stickynotes_save_now ();
+
+ if (applet->destroy_all_dialog != NULL)
+ gtk_widget_destroy (applet->destroy_all_dialog);
+
+ if (stickynotes->applets != NULL)
+ stickynotes->applets = g_list_remove (stickynotes->applets, applet);
+
+ if (stickynotes->applets == NULL) {
+ notes = stickynotes->notes;
+ while (notes) {
+ StickyNote *note = notes->data;
+ stickynote_free (note);
+ notes = g_list_next (notes);
+ }
+ }
+}
+
/* Create a Sticky Notes applet */
static void
sticky_notes_applet_new (StickyNotesApplet *applet)
diff --git a/po/POTFILES.in b/po/POTFILES.in
index 21a2a1fc7..c7e71ec60 100644
--- a/po/POTFILES.in
+++ b/po/POTFILES.in
@@ -59,7 +59,6 @@ gnome-applets/netspeed/netspeed-menu.ui
gnome-applets/netspeed/netspeed-applet.c
gnome-applets/netspeed/preferences.c
gnome-applets/sticky-notes/sticky-notes-applet.c
-gnome-applets/sticky-notes/sticky-notes-applet-callbacks.c
gnome-applets/sticky-notes/sticky-notes.c
gnome-applets/sticky-notes/ui/sticky-notes-applet-menu.ui
gnome-applets/sticky-notes/ui/sticky-notes-delete-all.ui
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]