summaryrefslogtreecommitdiff
path: root/stickynotes/stickynotes.c
diff options
context:
space:
mode:
Diffstat (limited to 'stickynotes/stickynotes.c')
-rw-r--r--stickynotes/stickynotes.c1816
1 files changed, 944 insertions, 872 deletions
diff --git a/stickynotes/stickynotes.c b/stickynotes/stickynotes.c
index 0b163dc0..b22f1aa9 100644
--- a/stickynotes/stickynotes.c
+++ b/stickynotes/stickynotes.c
@@ -50,978 +50,1050 @@ set_icon_geometry (GdkWindow *window,
int width,
int height)
{
- gulong data[4];
- Display *dpy;
-
- dpy = gdk_x11_display_get_xdisplay (gdk_window_get_display (window));
-
- data[0] = x;
- data[1] = y;
- data[2] = width;
- data[3] = height;
-
- XChangeProperty (dpy,
- GDK_WINDOW_XID (window),
- gdk_x11_get_xatom_by_name_for_display (
- gdk_window_get_display (window),
- "_NET_WM_ICON_GEOMETRY"),
- XA_CARDINAL, 32, PropModeReplace,
- (guchar *)&data, 4);
+ gulong data[4];
+ Display *dpy;
+
+ dpy = gdk_x11_display_get_xdisplay (gdk_window_get_display (window));
+
+ data[0] = x;
+ data[1] = y;
+ data[2] = width;
+ data[3] = height;
+
+ XChangeProperty (dpy,
+ GDK_WINDOW_XID (window),
+ gdk_x11_get_xatom_by_name_for_display (
+ gdk_window_get_display (window),
+ "_NET_WM_ICON_GEOMETRY"),
+ XA_CARDINAL, 32, PropModeReplace,
+ (guchar *)&data, 4);
}
/* Called when a timeout occurs. */
static gboolean
timeout_happened (gpointer data)
{
- if (GPOINTER_TO_UINT (data) == stickynotes->last_timeout_data)
- stickynotes_save ();
- return FALSE;
+ if (GPOINTER_TO_UINT (data) == stickynotes->last_timeout_data)
+ stickynotes_save ();
+
+ return FALSE;
}
/* Called when a text buffer is changed. */
static void
-buffer_changed (GtkTextBuffer *buffer, StickyNote *note)
+buffer_changed (GtkTextBuffer *buffer,
+ StickyNote *note)
{
- if ( (note->h + note->y) > stickynotes->max_height )
- gtk_scrolled_window_set_policy ( GTK_SCROLLED_WINDOW(note->w_scroller),
- GTK_POLICY_NEVER, GTK_POLICY_AUTOMATIC);
-
- /* When a buffer is changed, we set a 10 second timer. When
- the timer triggers, we will save the buffer if there have
- been no subsequent changes. */
- ++stickynotes->last_timeout_data;
- g_timeout_add_seconds (10, (GSourceFunc) timeout_happened,
- GUINT_TO_POINTER (stickynotes->last_timeout_data));
+ if ( (note->h + note->y) > stickynotes->max_height )
+ gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (note->w_scroller),
+ GTK_POLICY_NEVER, GTK_POLICY_AUTOMATIC);
+
+ /* When a buffer is changed, we set a 10 second timer. When
+ the timer triggers, we will save the buffer if there have
+ been no subsequent changes. */
+ ++stickynotes->last_timeout_data;
+ g_timeout_add_seconds (10, (GSourceFunc) timeout_happened,
+ GUINT_TO_POINTER (stickynotes->last_timeout_data));
}
/* Create a new (empty) Sticky Note at a specific position
and with specific size */
static StickyNote *
-stickynote_new_aux (GdkScreen *screen, gint x, gint y, gint w, gint h)
+stickynote_new_aux (GdkScreen *screen,
+ gint x,
+ gint y,
+ gint w,
+ gint h)
{
- StickyNote *note;
- GtkBuilder *builder;
-
- note = g_new (StickyNote, 1);
-
- builder = gtk_builder_new ();
- gtk_builder_add_from_resource (builder, GRESOURCE "sticky-notes-note.ui", NULL);
- gtk_builder_add_from_resource (builder, GRESOURCE "sticky-notes-properties.ui", NULL);
-
- note->w_window = GTK_WIDGET (gtk_builder_get_object (builder, "stickynote_window"));
- gtk_window_set_screen(GTK_WINDOW(note->w_window),screen);
- gtk_window_set_decorated (GTK_WINDOW (note->w_window), FALSE);
- gtk_window_set_skip_taskbar_hint (GTK_WINDOW (note->w_window), TRUE);
- gtk_window_set_skip_pager_hint (GTK_WINDOW (note->w_window), TRUE);
- gtk_widget_add_events (note->w_window, GDK_BUTTON_PRESS_MASK);
-
- note->w_title = GTK_WIDGET (gtk_builder_get_object (builder, "title_label"));
- note->w_body = GTK_WIDGET (gtk_builder_get_object (builder, "body_text"));
- note->w_scroller = GTK_WIDGET (gtk_builder_get_object (builder, "body_scroller"));
- note->w_lock = GTK_WIDGET (gtk_builder_get_object (builder, "lock_button"));
- gtk_widget_add_events (note->w_lock, GDK_BUTTON_PRESS_MASK);
-
- note->buffer = GTK_SOURCE_BUFFER(gtk_text_view_get_buffer(GTK_TEXT_VIEW(note->w_body)));
-
- note->w_close = GTK_WIDGET (gtk_builder_get_object (builder, "close_button"));
- gtk_widget_add_events (note->w_close, GDK_BUTTON_PRESS_MASK);
- note->w_resize_se = GTK_WIDGET (gtk_builder_get_object (builder, "resize_se_box"));
- gtk_widget_add_events (note->w_resize_se, GDK_BUTTON_PRESS_MASK);
- note->w_resize_sw = GTK_WIDGET (gtk_builder_get_object (builder, "resize_sw_box"));
- gtk_widget_add_events (note->w_resize_sw, GDK_BUTTON_PRESS_MASK);
-
- note->img_lock = GTK_IMAGE (gtk_builder_get_object (builder,
- "lock_img"));
- note->img_close = GTK_IMAGE (gtk_builder_get_object (builder,
- "close_img"));
- note->img_resize_se = GTK_IMAGE (gtk_builder_get_object (builder,
- "resize_se_img"));
- note->img_resize_sw = GTK_IMAGE (gtk_builder_get_object (builder,
- "resize_sw_img"));
-
- /* deal with RTL environments */
- gtk_widget_set_direction (GTK_WIDGET (gtk_builder_get_object (builder, "resize_bar")),
- GTK_TEXT_DIR_LTR);
-
- note->w_menu = GTK_WIDGET (gtk_builder_get_object (builder, "stickynote_menu"));
- note->ta_lock_toggle_item = GTK_TOGGLE_ACTION (gtk_builder_get_object (builder,
- "popup_toggle_lock"));
-
- note->w_properties = GTK_WIDGET (gtk_builder_get_object (builder,
- "stickynote_properties"));
- gtk_window_set_screen (GTK_WINDOW (note->w_properties), screen);
-
- note->w_entry = GTK_WIDGET (gtk_builder_get_object (builder, "title_entry"));
- note->w_color = GTK_WIDGET (gtk_builder_get_object (builder, "note_color"));
- note->w_color_label = GTK_WIDGET (gtk_builder_get_object (builder, "color_label"));
- note->w_font_color = GTK_WIDGET (gtk_builder_get_object (builder, "font_color"));
- note->w_font_color_label = GTK_WIDGET (gtk_builder_get_object (builder,
- "font_color_label"));
- note->w_font = GTK_WIDGET (gtk_builder_get_object (builder, "note_font"));
- note->w_font_label = GTK_WIDGET (gtk_builder_get_object (builder, "font_label"));
- note->w_def_color = GTK_WIDGET (&GTK_CHECK_BUTTON (
- gtk_builder_get_object (builder,
- "def_color_check"))->toggle_button);
- note->w_def_font = GTK_WIDGET (&GTK_CHECK_BUTTON (
- gtk_builder_get_object (builder,
- "def_font_check"))->toggle_button);
-
- note->color = NULL;
- note->font_color = NULL;
- note->font = NULL;
- note->locked = FALSE;
- note->x = x;
- note->y = y;
- note->w = w;
- note->h = h;
-
- /* Customize the window */
- if (g_settings_get_boolean (stickynotes->settings, "sticky"))
- gtk_window_stick(GTK_WINDOW(note->w_window));
-
- if (w == 0 || h == 0)
- gtk_window_resize (GTK_WINDOW(note->w_window),
- g_settings_get_int (stickynotes->settings, "default-width"),
- g_settings_get_int (stickynotes->settings, "default-height"));
- else
- gtk_window_resize (GTK_WINDOW(note->w_window),
- note->w,
- note->h);
-
- if (x != -1 && y != -1)
- gtk_window_move (GTK_WINDOW(note->w_window),
- note->x,
- note->y);
-
- /* Set the button images */
- gtk_image_set_from_icon_name (note->img_close, STICKYNOTES_STOCK_CLOSE, GTK_ICON_SIZE_MENU);
- gtk_image_set_pixel_size (note->img_close, STICKYNOTES_ICON_SIZE);
-
- gtk_image_set_from_icon_name (note->img_resize_se, STICKYNOTES_STOCK_RESIZE_SE, GTK_ICON_SIZE_MENU);
- gtk_image_set_pixel_size (note->img_resize_se, STICKYNOTES_ICON_SIZE);
-
- gtk_image_set_from_icon_name (note->img_resize_sw, STICKYNOTES_STOCK_RESIZE_SW, GTK_ICON_SIZE_MENU);
- gtk_image_set_pixel_size (note->img_resize_sw, STICKYNOTES_ICON_SIZE);
-
- gtk_widget_show(note->w_lock);
- gtk_widget_show(note->w_close);
- gtk_widget_show(GTK_WIDGET (gtk_builder_get_object (builder, "resize_bar")));
-
- /* Customize the title and colors, hide and unlock */
- stickynote_set_title(note, NULL);
- stickynote_set_color(note, NULL, NULL, TRUE);
- stickynote_set_font(note, NULL, TRUE);
- stickynote_set_locked(note, FALSE);
-
- gtk_widget_realize (note->w_window);
-
- /* Connect a popup menu to all buttons and title */
- /* GtkBuilder holds and drops the references to all the widgets it
- * creates for as long as it exist (GtkBuilder). Hence in our callback
- * we would have an invalid GtkMenu. We need to ref it.
- */
- g_object_ref (note->w_menu);
- g_signal_connect (G_OBJECT (note->w_window), "button-press-event",
- G_CALLBACK (stickynote_show_popup_menu), note->w_menu);
-
- g_signal_connect (G_OBJECT (note->w_lock), "button-press-event",
- G_CALLBACK (stickynote_show_popup_menu), note->w_menu);
-
- g_signal_connect (G_OBJECT (note->w_close), "button-press-event",
- G_CALLBACK (stickynote_show_popup_menu), note->w_menu);
-
- g_signal_connect (G_OBJECT (note->w_resize_se), "button-press-event",
- G_CALLBACK (stickynote_show_popup_menu), note->w_menu);
-
- g_signal_connect (G_OBJECT (note->w_resize_sw), "button-press-event",
- G_CALLBACK (stickynote_show_popup_menu), note->w_menu);
-
- /* Connect a properties dialog to the note */
- gtk_window_set_transient_for (GTK_WINDOW(note->w_properties),
- GTK_WINDOW(note->w_window));
- gtk_dialog_set_default_response (GTK_DIALOG(note->w_properties),
- GTK_RESPONSE_CLOSE);
- g_signal_connect (G_OBJECT (note->w_properties), "response",
- G_CALLBACK (response_cb), note);
-
- /* Connect signals to the sticky note */
- g_signal_connect (G_OBJECT (note->w_lock), "clicked",
- G_CALLBACK (stickynote_toggle_lock_cb), note);
- g_signal_connect (G_OBJECT (note->w_close), "clicked",
- G_CALLBACK (stickynote_close_cb), note);
- g_signal_connect (G_OBJECT (note->w_resize_se), "button-press-event",
- G_CALLBACK (stickynote_resize_cb), note);
- g_signal_connect (G_OBJECT (note->w_resize_sw), "button-press-event",
- G_CALLBACK (stickynote_resize_cb), note);
-
- g_signal_connect (G_OBJECT (note->w_window), "button-press-event",
- G_CALLBACK (stickynote_move_cb), note);
- g_signal_connect (G_OBJECT (note->w_window), "configure-event",
- G_CALLBACK (stickynote_configure_cb), note);
- g_signal_connect (G_OBJECT (note->w_window), "delete-event",
- G_CALLBACK (stickynote_delete_cb), note);
-
- g_signal_connect (gtk_builder_get_object (builder,
- "popup_create"), "activate",
- G_CALLBACK (popup_create_cb), note);
- g_signal_connect (gtk_builder_get_object (builder,
- "popup_destroy"), "activate",
- G_CALLBACK (popup_destroy_cb), note);
- g_signal_connect (gtk_builder_get_object (builder,
- "popup_toggle_lock"), "toggled",
- G_CALLBACK (popup_toggle_lock_cb), note);
- g_signal_connect (gtk_builder_get_object (builder,
- "popup_properties"), "activate",
- G_CALLBACK (popup_properties_cb), note);
-
- g_signal_connect_swapped (G_OBJECT (note->w_entry), "changed",
- G_CALLBACK (properties_apply_title_cb), note);
- g_signal_connect (G_OBJECT (note->w_color), "color-set",
- G_CALLBACK (properties_color_cb), note);
- g_signal_connect (G_OBJECT (note->w_font_color), "color-set",
- G_CALLBACK (properties_color_cb), note);
- g_signal_connect_swapped (G_OBJECT (note->w_def_color), "toggled",
- G_CALLBACK (properties_apply_color_cb), note);
- g_signal_connect (G_OBJECT (note->w_font), "font-set",
- G_CALLBACK (properties_font_cb), note);
- g_signal_connect_swapped (G_OBJECT (note->w_def_font), "toggled",
- G_CALLBACK (properties_apply_font_cb), note);
- g_signal_connect (G_OBJECT (note->w_entry), "activate",
- G_CALLBACK (properties_activate_cb), note);
- g_signal_connect (G_OBJECT (note->w_properties), "delete-event",
- G_CALLBACK (gtk_widget_hide), note);
-
- g_object_unref(builder);
-
- g_signal_connect_after (note->w_body, "button-press-event",
- G_CALLBACK (gtk_true), note);
-
- g_signal_connect (gtk_text_view_get_buffer(GTK_TEXT_VIEW(note->w_body)),
- "changed",
- G_CALLBACK (buffer_changed), note);
-
- return note;
+ StickyNote *note;
+ GtkBuilder *builder;
+
+ note = g_new (StickyNote, 1);
+
+ builder = gtk_builder_new ();
+ gtk_builder_add_from_resource (builder,
+ GRESOURCE "sticky-notes-note.ui",
+ NULL);
+ gtk_builder_add_from_resource (builder,
+ GRESOURCE "sticky-notes-properties.ui",
+ NULL);
+
+ note->w_window = GTK_WIDGET (gtk_builder_get_object (builder,
+ "stickynote_window"));
+ gtk_window_set_screen (GTK_WINDOW (note->w_window),screen);
+ gtk_window_set_decorated (GTK_WINDOW (note->w_window), FALSE);
+ gtk_window_set_skip_taskbar_hint (GTK_WINDOW (note->w_window), TRUE);
+ gtk_window_set_skip_pager_hint (GTK_WINDOW (note->w_window), TRUE);
+ gtk_widget_add_events (note->w_window, GDK_BUTTON_PRESS_MASK);
+
+ note->w_title = GTK_WIDGET (gtk_builder_get_object (builder,
+ "title_label"));
+ note->w_body = GTK_WIDGET (gtk_builder_get_object (builder,
+ "body_text"));
+ note->w_scroller = GTK_WIDGET (gtk_builder_get_object (builder,
+ "body_scroller"));
+ note->w_lock = GTK_WIDGET (gtk_builder_get_object (builder,
+ "lock_button"));
+ gtk_widget_add_events (note->w_lock, GDK_BUTTON_PRESS_MASK);
+
+ note->buffer =
+ GTK_SOURCE_BUFFER (gtk_text_view_get_buffer (GTK_TEXT_VIEW (note->w_body)));
+
+ note->w_close =
+ GTK_WIDGET (gtk_builder_get_object (builder, "close_button"));
+ gtk_widget_add_events (note->w_close, GDK_BUTTON_PRESS_MASK);
+ note->w_resize_se =
+ GTK_WIDGET (gtk_builder_get_object (builder, "resize_se_box"));
+ gtk_widget_add_events (note->w_resize_se, GDK_BUTTON_PRESS_MASK);
+ note->w_resize_sw =
+ GTK_WIDGET (gtk_builder_get_object (builder, "resize_sw_box"));
+ gtk_widget_add_events (note->w_resize_sw, GDK_BUTTON_PRESS_MASK);
+
+ note->img_lock =
+ GTK_IMAGE (gtk_builder_get_object (builder, "lock_img"));
+ note->img_close =
+ GTK_IMAGE (gtk_builder_get_object (builder, "close_img"));
+ note->img_resize_se =
+ GTK_IMAGE (gtk_builder_get_object (builder, "resize_se_img"));
+ note->img_resize_sw =
+ GTK_IMAGE (gtk_builder_get_object (builder, "resize_sw_img"));
+
+ /* deal with RTL environments */
+ gtk_widget_set_direction (GTK_WIDGET (gtk_builder_get_object (builder, "resize_bar")),
+ GTK_TEXT_DIR_LTR);
+
+ note->w_menu = GTK_WIDGET (gtk_builder_get_object (builder,
+ "stickynote_menu"));
+ note->ta_lock_toggle_item =
+ GTK_TOGGLE_ACTION (gtk_builder_get_object (builder,
+ "popup_toggle_lock"));
+
+ note->w_properties =
+ GTK_WIDGET (gtk_builder_get_object (builder,
+ "stickynote_properties"));
+ gtk_window_set_screen (GTK_WINDOW (note->w_properties), screen);
+
+ note->w_entry =
+ GTK_WIDGET (gtk_builder_get_object (builder, "title_entry"));
+ note->w_color =
+ GTK_WIDGET (gtk_builder_get_object (builder, "note_color"));
+ note->w_color_label =
+ GTK_WIDGET (gtk_builder_get_object (builder, "color_label"));
+ note->w_font_color =
+ GTK_WIDGET (gtk_builder_get_object (builder, "font_color"));
+ note->w_font_color_label =
+ GTK_WIDGET (gtk_builder_get_object (builder,
+ "font_color_label"));
+ note->w_font =
+ GTK_WIDGET (gtk_builder_get_object (builder, "note_font"));
+ note->w_font_label =
+ GTK_WIDGET (gtk_builder_get_object (builder, "font_label"));
+ note->w_def_color =
+ GTK_WIDGET (&GTK_CHECK_BUTTON (gtk_builder_get_object (builder,
+ "def_color_check"))->toggle_button);
+ note->w_def_font =
+ GTK_WIDGET (&GTK_CHECK_BUTTON (gtk_builder_get_object (builder,
+ "def_font_check"))->toggle_button);
+
+ note->color = NULL;
+ note->font_color = NULL;
+ note->font = NULL;
+ note->locked = FALSE;
+ note->x = x;
+ note->y = y;
+ note->w = w;
+ note->h = h;
+
+ /* Customize the window */
+ if (g_settings_get_boolean (stickynotes->settings, "sticky"))
+ gtk_window_stick (GTK_WINDOW (note->w_window));
+
+ if (w == 0 || h == 0)
+ gtk_window_resize (GTK_WINDOW (note->w_window),
+ g_settings_get_int (stickynotes->settings,
+ "default-width"),
+ g_settings_get_int (stickynotes->settings,
+ "default-height"));
+ else
+ gtk_window_resize (GTK_WINDOW (note->w_window),
+ note->w,
+ note->h);
+
+ if (x != -1 && y != -1)
+ gtk_window_move (GTK_WINDOW (note->w_window),
+ note->x,
+ note->y);
+
+ /* Set the button images */
+ gtk_image_set_from_icon_name (note->img_close,
+ STICKYNOTES_STOCK_CLOSE,
+ GTK_ICON_SIZE_MENU);
+ gtk_image_set_pixel_size (note->img_close,
+ STICKYNOTES_ICON_SIZE);
+
+ gtk_image_set_from_icon_name (note->img_resize_se,
+ STICKYNOTES_STOCK_RESIZE_SE,
+ GTK_ICON_SIZE_MENU);
+ gtk_image_set_pixel_size (note->img_resize_se,
+ STICKYNOTES_ICON_SIZE);
+
+ gtk_image_set_from_icon_name (note->img_resize_sw,
+ STICKYNOTES_STOCK_RESIZE_SW,
+ GTK_ICON_SIZE_MENU);
+ gtk_image_set_pixel_size (note->img_resize_sw,
+ STICKYNOTES_ICON_SIZE);
+
+ gtk_widget_show (note->w_lock);
+ gtk_widget_show (note->w_close);
+ gtk_widget_show (GTK_WIDGET (gtk_builder_get_object (builder,
+ "resize_bar")));
+
+ /* Customize the title and colors, hide and unlock */
+ stickynote_set_title (note, NULL);
+ stickynote_set_color (note, NULL, NULL, TRUE);
+ stickynote_set_font (note, NULL, TRUE);
+ stickynote_set_locked (note, FALSE);
+
+ gtk_widget_realize (note->w_window);
+
+ /* Connect a popup menu to all buttons and title */
+ /* GtkBuilder holds and drops the references to all the widgets it
+ * creates for as long as it exist (GtkBuilder). Hence in our callback
+ * we would have an invalid GtkMenu. We need to ref it.
+ */
+ g_object_ref (note->w_menu);
+ g_signal_connect (G_OBJECT (note->w_window), "button-press-event",
+ G_CALLBACK (stickynote_show_popup_menu), note->w_menu);
+
+ g_signal_connect (G_OBJECT (note->w_lock), "button-press-event",
+ G_CALLBACK (stickynote_show_popup_menu), note->w_menu);
+
+ g_signal_connect (G_OBJECT (note->w_close), "button-press-event",
+ G_CALLBACK (stickynote_show_popup_menu), note->w_menu);
+
+ g_signal_connect (G_OBJECT (note->w_resize_se), "button-press-event",
+ G_CALLBACK (stickynote_show_popup_menu), note->w_menu);
+
+ g_signal_connect (G_OBJECT (note->w_resize_sw), "button-press-event",
+ G_CALLBACK (stickynote_show_popup_menu), note->w_menu);
+
+ /* Connect a properties dialog to the note */
+ gtk_window_set_transient_for (GTK_WINDOW (note->w_properties),
+ GTK_WINDOW (note->w_window));
+ gtk_dialog_set_default_response (GTK_DIALOG (note->w_properties),
+ GTK_RESPONSE_CLOSE);
+ g_signal_connect (G_OBJECT (note->w_properties), "response",
+ G_CALLBACK (response_cb), note);
+
+ /* Connect signals to the sticky note */
+ g_signal_connect (G_OBJECT (note->w_lock), "clicked",
+ G_CALLBACK (stickynote_toggle_lock_cb), note);
+ g_signal_connect (G_OBJECT (note->w_close), "clicked",
+ G_CALLBACK (stickynote_close_cb), note);
+ g_signal_connect (G_OBJECT (note->w_resize_se), "button-press-event",
+ G_CALLBACK (stickynote_resize_cb), note);
+ g_signal_connect (G_OBJECT (note->w_resize_sw), "button-press-event",
+ G_CALLBACK (stickynote_resize_cb), note);
+
+ g_signal_connect (G_OBJECT (note->w_window), "button-press-event",
+ G_CALLBACK (stickynote_move_cb), note);
+ g_signal_connect (G_OBJECT (note->w_window), "configure-event",
+ G_CALLBACK (stickynote_configure_cb), note);
+ g_signal_connect (G_OBJECT (note->w_window), "delete-event",
+ G_CALLBACK (stickynote_delete_cb), note);
+
+ g_signal_connect (gtk_builder_get_object (builder, "popup_create"),
+ "activate", G_CALLBACK (popup_create_cb), note);
+ g_signal_connect (gtk_builder_get_object (builder, "popup_destroy"),
+ "activate", G_CALLBACK (popup_destroy_cb), note);
+ g_signal_connect (gtk_builder_get_object (builder, "popup_toggle_lock"),
+ "toggled", G_CALLBACK (popup_toggle_lock_cb), note);
+ g_signal_connect (gtk_builder_get_object (builder, "popup_properties"),
+ "activate", G_CALLBACK (popup_properties_cb), note);
+
+ g_signal_connect_swapped (G_OBJECT (note->w_entry), "changed",
+ G_CALLBACK (properties_apply_title_cb), note);
+ g_signal_connect (G_OBJECT (note->w_color), "color-set",
+ G_CALLBACK (properties_color_cb), note);
+ g_signal_connect (G_OBJECT (note->w_font_color), "color-set",
+ G_CALLBACK (properties_color_cb), note);
+ g_signal_connect_swapped (G_OBJECT (note->w_def_color), "toggled",
+ G_CALLBACK (properties_apply_color_cb), note);
+ g_signal_connect (G_OBJECT (note->w_font), "font-set",
+ G_CALLBACK (properties_font_cb), note);
+ g_signal_connect_swapped (G_OBJECT (note->w_def_font), "toggled",
+ G_CALLBACK (properties_apply_font_cb), note);
+ g_signal_connect (G_OBJECT (note->w_entry), "activate",
+ G_CALLBACK (properties_activate_cb), note);
+ g_signal_connect (G_OBJECT (note->w_properties), "delete-event",
+ G_CALLBACK (gtk_widget_hide), note);
+
+ g_object_unref (builder);
+
+ g_signal_connect_after (note->w_body, "button-press-event",
+ G_CALLBACK (gtk_true), note);
+
+ g_signal_connect (gtk_text_view_get_buffer (GTK_TEXT_VIEW (note->w_body)),
+ "changed", G_CALLBACK (buffer_changed), note);
+
+ return note;
}
/* Create a new (empty) Sticky Note */
StickyNote *
stickynote_new (GdkScreen *screen)
{
- return stickynote_new_aux (screen, -1, -1, 0, 0);
+ return stickynote_new_aux (screen, -1, -1, 0, 0);
}
/* Destroy a Sticky Note */
-void stickynote_free(StickyNote *note)
+void stickynote_free (StickyNote *note)
{
- gtk_widget_destroy(note->w_properties);
- gtk_widget_destroy(note->w_menu);
- gtk_widget_destroy(note->w_window);
+ gtk_widget_destroy (note->w_properties);
+ gtk_widget_destroy (note->w_menu);
+ gtk_widget_destroy (note->w_window);
- g_free(note->color);
- g_free(note->font_color);
- g_free(note->font);
+ g_free (note->color);
+ g_free (note->font_color);
+ g_free (note->font);
- g_free(note);
+ g_free (note);
}
/* Change the sticky note title and color */
void stickynote_change_properties (StickyNote *note)
{
- char *color_str = NULL;
-
- gtk_entry_set_text(GTK_ENTRY(note->w_entry),
- gtk_label_get_text (GTK_LABEL (note->w_title)));
-
- gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(note->w_def_color),
- note->color == NULL);
-
- if (note->color)
- color_str = g_strdup (note->color);
- else
- {
- color_str = g_settings_get_string (stickynotes->settings, "default-color");
- }
-
- if (color_str)
- {
- GdkRGBA color;
- gdk_rgba_parse (&color, color_str);
- gtk_color_chooser_set_rgba (GTK_COLOR_CHOOSER (note->w_color), &color);
- g_free (color_str);
- }
-
- if (note->font_color)
- color_str = g_strdup (note->font_color);
- else
- {
- color_str = g_settings_get_string (stickynotes->settings, "default-font-color");
- }
-
- if (color_str)
- {
- GdkRGBA font_color;
- gdk_rgba_parse (&font_color, color_str);
- gtk_color_chooser_set_rgba (GTK_COLOR_CHOOSER (note->w_font_color), &font_color);
- g_free (color_str);
- }
-
- gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(note->w_def_font),
- note->font == NULL);
- if (note->font)
- gtk_font_button_set_font_name (GTK_FONT_BUTTON (note->w_font),
- note->font);
-
- gtk_widget_show (note->w_properties);
-
- stickynotes_save();
+ char *color_str = NULL;
+
+ gtk_entry_set_text (GTK_ENTRY (note->w_entry),
+ gtk_label_get_text (GTK_LABEL (note->w_title)));
+
+ gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (note->w_def_color),
+ note->color == NULL);
+
+ if (note->color)
+ color_str = g_strdup (note->color);
+ else {
+ color_str = g_settings_get_string (stickynotes->settings,
+ "default-color");
+ }
+
+ if (color_str) {
+ GdkRGBA color;
+ gdk_rgba_parse (&color, color_str);
+ gtk_color_chooser_set_rgba (GTK_COLOR_CHOOSER (note->w_color),
+ &color);
+ g_free (color_str);
+ }
+
+ if (note->font_color)
+ color_str = g_strdup (note->font_color);
+ else {
+ color_str = g_settings_get_string (stickynotes->settings,
+ "default-font-color");
+ }
+
+ if (color_str) {
+ GdkRGBA font_color;
+ gdk_rgba_parse (&font_color, color_str);
+ gtk_color_chooser_set_rgba (GTK_COLOR_CHOOSER (note->w_font_color),
+ &font_color);
+ g_free (color_str);
+ }
+
+ gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (note->w_def_font),
+ note->font == NULL);
+ if (note->font)
+ gtk_font_button_set_font_name (GTK_FONT_BUTTON (note->w_font),
+ note->font);
+
+ gtk_widget_show (note->w_properties);
+
+ stickynotes_save ();
}
static void
-response_cb (GtkWidget *dialog, gint id, gpointer data)
+response_cb (GtkWidget *dialog,
+ gint id, gpointer data)
{
- if (id == GTK_RESPONSE_HELP)
- gtk_show_uri_on_window (GTK_WINDOW (dialog),
- "help:mate-stickynotes-applet/stickynotes-settings-individual",
- gtk_get_current_event_time (),
- NULL);
- else if (id == GTK_RESPONSE_CLOSE)
- gtk_widget_hide (dialog);
+ if (id == GTK_RESPONSE_HELP)
+ gtk_show_uri_on_window (GTK_WINDOW (dialog),
+ "help:mate-stickynotes-applet/stickynotes-settings-individual",
+ gtk_get_current_event_time (),
+ NULL);
+ else if (id == GTK_RESPONSE_CLOSE)
+ gtk_widget_hide (dialog);
}
/* Check if a sticky note is empty */
-gboolean stickynote_get_empty(const StickyNote *note)
+gboolean
+stickynote_get_empty (const StickyNote *note)
{
- return gtk_text_buffer_get_char_count(gtk_text_view_get_buffer(GTK_TEXT_VIEW(note->w_body))) == 0;
+ return gtk_text_buffer_get_char_count (gtk_text_view_get_buffer (GTK_TEXT_VIEW (note->w_body))) == 0;
}
/* Set the sticky note title */
-void stickynote_set_title(StickyNote *note, const gchar *title)
+void
+stickynote_set_title (StickyNote *note,
+ const gchar *title)
{
- /* If title is NULL, use the current date as the title. */
- if (!title) {
- GDateTime *now;
- gchar *date_title;
- gchar *date_format;
-
- date_format = g_settings_get_string (stickynotes->settings, "date-format");
- if (!date_format)
- date_format = g_strdup ("%x");
-
- now = g_date_time_new_now_local ();
- date_title = g_date_time_format (now, date_format);
-
- gtk_window_set_title(GTK_WINDOW(note->w_window), date_title);
- gtk_label_set_text(GTK_LABEL (note->w_title), date_title);
-
- g_date_time_unref (now);
- g_free(date_title);
- g_free(date_format);
- }
- else {
- gtk_window_set_title(GTK_WINDOW(note->w_window), title);
- gtk_label_set_text(GTK_LABEL (note->w_title), title);
- }
+ /* If title is NULL, use the current date as the title. */
+ if (!title) {
+ GDateTime *now;
+ gchar *date_title;
+ gchar *date_format;
+
+ date_format = g_settings_get_string (stickynotes->settings, "date-format");
+ if (!date_format)
+ date_format = g_strdup ("%x");
+
+ now = g_date_time_new_now_local ();
+ date_title = g_date_time_format (now, date_format);
+
+ gtk_window_set_title (GTK_WINDOW (note->w_window), date_title);
+ gtk_label_set_text (GTK_LABEL (note->w_title), date_title);
+
+ g_date_time_unref (now);
+ g_free (date_title);
+ g_free (date_format);
+ }
+ else {
+ gtk_window_set_title (GTK_WINDOW (note->w_window), title);
+ gtk_label_set_text (GTK_LABEL (note->w_title), title);
+ }
}
/* Set the sticky note color */
void
stickynote_set_color (StickyNote *note,
- const gchar *color_str,
- const gchar *font_color_str,
- gboolean save)
+ const gchar *color_str,
+ const gchar *font_color_str,
+ gboolean save)
{
- char *color_str_actual, *font_color_str_actual;
- gboolean force_default, use_system_color;
-
- if (save) {
- if (note->color)
- g_free (note->color);
- if (note->font_color)
- g_free (note->font_color);
-
- note->color = color_str ?
- g_strdup (color_str) : NULL;
- note->font_color = font_color_str ?
- g_strdup (font_color_str) : NULL;
-
- gtk_widget_set_sensitive (note->w_color_label,
- note->color != NULL);
- gtk_widget_set_sensitive (note->w_font_color_label,
- note->font_color != NULL);
- gtk_widget_set_sensitive (note->w_color,
- note->color != NULL);
- gtk_widget_set_sensitive (note->w_font_color,
- note->color != NULL);
- }
-
- force_default = g_settings_get_boolean (stickynotes->settings, "force-default");
- use_system_color = g_settings_get_boolean (stickynotes->settings, "use-system-color");
-
- /* If "force_default" is enabled or color_str is NULL,
- * then we use the default color instead of color_str. */
- if (!color_str || force_default)
- {
- if (use_system_color)
- color_str_actual = NULL;
- else
- color_str_actual = g_settings_get_string (stickynotes->settings, "default-color");
- }
- else
- color_str_actual = g_strdup (color_str);
-
- if (!font_color_str || force_default)
- {
- if (use_system_color)
- font_color_str_actual = NULL;
- else
- font_color_str_actual = g_settings_get_string (stickynotes->settings, "default-font-color");
- }
- else
- font_color_str_actual = g_strdup (font_color_str);
-
- /* Do not use custom colors if "use_system_color" is enabled */
- if (color_str_actual) {
- GdkRGBA colors[4];
- gint i;
-
- for (i = 0; i <= 3; i++)
- {
- gdk_rgba_parse (&colors[i], color_str_actual);
- colors[i].red = (colors[i].red * (10 - i)) / 10;
- colors[i].green = (colors[i].green * (10 - i)) / 10;
- colors[i].blue = (colors[i].blue * (10 - i)) / 10;
- }
-
- gtk_widget_override_background_color (note->w_window, GTK_STATE_FLAG_NORMAL, &colors[0]);
- gtk_widget_override_background_color (note->w_body, GTK_STATE_FLAG_NORMAL, &colors[0]);
- gtk_widget_override_background_color (note->w_lock, GTK_STATE_FLAG_NORMAL, &colors[0]);
- gtk_widget_override_background_color (note->w_close, GTK_STATE_FLAG_NORMAL, &colors[0]);
- gtk_widget_override_background_color (note->w_resize_se, GTK_STATE_FLAG_NORMAL, &colors[0]);
- gtk_widget_override_background_color (note->w_resize_sw, GTK_STATE_FLAG_NORMAL, &colors[0]);
- } else {
- gtk_widget_override_background_color (note->w_window, GTK_STATE_FLAG_NORMAL, NULL);
- gtk_widget_override_background_color (note->w_body, GTK_STATE_FLAG_NORMAL, NULL);
- gtk_widget_override_background_color (note->w_lock, GTK_STATE_FLAG_NORMAL, NULL);
- gtk_widget_override_background_color (note->w_close, GTK_STATE_FLAG_NORMAL, NULL);
- gtk_widget_override_background_color (note->w_resize_se, GTK_STATE_FLAG_NORMAL, NULL);
- gtk_widget_override_background_color (note->w_resize_sw, GTK_STATE_FLAG_NORMAL, NULL);
- }
-
- if (font_color_str_actual)
- {
- GdkRGBA color;
-
- gdk_rgba_parse (&color, font_color_str_actual);
-
- gtk_widget_override_color (note->w_window, GTK_STATE_FLAG_NORMAL, &color);
- gtk_widget_override_color (note->w_body, GTK_STATE_FLAG_NORMAL, &color);
- }
- else
- {
- gtk_widget_override_color (note->w_window, GTK_STATE_FLAG_NORMAL, NULL);
- gtk_widget_override_color (note->w_body, GTK_STATE_FLAG_NORMAL, NULL);
- }
-
- if (color_str_actual)
- g_free (color_str_actual);
- if (font_color_str_actual)
- g_free (font_color_str_actual);
+ char *color_str_actual, *font_color_str_actual;
+ gboolean force_default, use_system_color;
+
+ if (save) {
+ if (note->color)
+ g_free (note->color);
+ if (note->font_color)
+ g_free (note->font_color);
+
+ note->color = color_str ? g_strdup (color_str) : NULL;
+ note->font_color = font_color_str ? g_strdup (font_color_str) : NULL;
+
+ gtk_widget_set_sensitive (note->w_color_label,
+ note->color != NULL);
+ gtk_widget_set_sensitive (note->w_font_color_label,
+ note->font_color != NULL);
+ gtk_widget_set_sensitive (note->w_color,
+ note->color != NULL);
+ gtk_widget_set_sensitive (note->w_font_color,
+ note->color != NULL);
+ }
+
+ force_default = g_settings_get_boolean (stickynotes->settings,
+ "force-default");
+ use_system_color = g_settings_get_boolean (stickynotes->settings,
+ "use-system-color");
+
+ /* If "force_default" is enabled or color_str is NULL,
+ * then we use the default color instead of color_str. */
+ if (!color_str || force_default) {
+ if (use_system_color)
+ color_str_actual = NULL;
+ else
+ color_str_actual = g_settings_get_string (stickynotes->settings,
+ "default-color");
+ } else
+ color_str_actual = g_strdup (color_str);
+
+ if (!font_color_str || force_default) {
+ if (use_system_color)
+ font_color_str_actual = NULL;
+ else
+ font_color_str_actual = g_settings_get_string (stickynotes->settings,
+ "default-font-color");
+ } else
+ font_color_str_actual = g_strdup (font_color_str);
+
+ /* Do not use custom colors if "use_system_color" is enabled */
+ if (color_str_actual) {
+ GdkRGBA colors[4];
+ gint i;
+
+ for (i = 0; i <= 3; i++) {
+ gdk_rgba_parse (&colors[i], color_str_actual);
+ colors[i].red = (colors[i].red * (10 - i)) / 10;
+ colors[i].green = (colors[i].green * (10 - i)) / 10;
+ colors[i].blue = (colors[i].blue * (10 - i)) / 10;
+ }
+
+ gtk_widget_override_background_color (note->w_window,
+ GTK_STATE_FLAG_NORMAL,
+ &colors[0]);
+ gtk_widget_override_background_color (note->w_body,
+ GTK_STATE_FLAG_NORMAL,
+ &colors[0]);
+ gtk_widget_override_background_color (note->w_lock,
+ GTK_STATE_FLAG_NORMAL,
+ &colors[0]);
+ gtk_widget_override_background_color (note->w_close,
+ GTK_STATE_FLAG_NORMAL,
+ &colors[0]);
+ gtk_widget_override_background_color (note->w_resize_se,
+ GTK_STATE_FLAG_NORMAL,
+ &colors[0]);
+ gtk_widget_override_background_color (note->w_resize_sw,
+ GTK_STATE_FLAG_NORMAL,
+ &colors[0]);
+ } else {
+ gtk_widget_override_background_color (note->w_window,
+ GTK_STATE_FLAG_NORMAL,
+ NULL);
+ gtk_widget_override_background_color (note->w_body,
+ GTK_STATE_FLAG_NORMAL,
+ NULL);
+ gtk_widget_override_background_color (note->w_lock,
+ GTK_STATE_FLAG_NORMAL,
+ NULL);
+ gtk_widget_override_background_color (note->w_close,
+ GTK_STATE_FLAG_NORMAL,
+ NULL);
+ gtk_widget_override_background_color (note->w_resize_se,
+ GTK_STATE_FLAG_NORMAL,
+ NULL);
+ gtk_widget_override_background_color (note->w_resize_sw,
+ GTK_STATE_FLAG_NORMAL,
+ NULL);
+ }
+
+ if (font_color_str_actual) {
+ GdkRGBA color;
+
+ gdk_rgba_parse (&color, font_color_str_actual);
+
+ gtk_widget_override_color (note->w_window,
+ GTK_STATE_FLAG_NORMAL,
+ &color);
+ gtk_widget_override_color (note->w_body,
+ GTK_STATE_FLAG_NORMAL,
+ &color);
+ } else {
+ gtk_widget_override_color (note->w_window,
+ GTK_STATE_FLAG_NORMAL,
+ NULL);
+ gtk_widget_override_color (note->w_body,
+ GTK_STATE_FLAG_NORMAL,
+ NULL);
+ }
+
+ if (color_str_actual)
+ g_free (color_str_actual);
+ if (font_color_str_actual)
+ g_free (font_color_str_actual);
}
/* Set the sticky note font */
void
-stickynote_set_font (StickyNote *note, const gchar *font_str, gboolean save)
+stickynote_set_font (StickyNote *note,
+ const gchar *font_str,
+ gboolean save)
{
- PangoFontDescription *font_desc;
- gchar *font_str_actual;
-
- if (save) {
- g_free (note->font);
- note->font = font_str ? g_strdup (font_str) : NULL;
-
- gtk_widget_set_sensitive (note->w_font_label, note->font != NULL);
- gtk_widget_set_sensitive(note->w_font, note->font != NULL);
- }
-
- /* If "force_default" is enabled or font_str is NULL,
- * then we use the default font instead of font_str. */
- if (!font_str || g_settings_get_boolean (stickynotes->settings, "force-default"))
- {
- if (g_settings_get_boolean (stickynotes->settings, "use-system-font"))
- font_str_actual = NULL;
- else
- font_str_actual = g_settings_get_string (stickynotes->settings, "default-font");
- }
- else
- font_str_actual = g_strdup (font_str);
-
- /* Do not use custom fonts if "use_system_font" is enabled */
- font_desc = font_str_actual ?
- pango_font_description_from_string (font_str_actual): NULL;
-
- /* Apply the style to the widgets */
- gtk_widget_override_font (note->w_window, font_desc);
- gtk_widget_override_font (note->w_body, font_desc);
-
- g_free (font_str_actual);
- pango_font_description_free (font_desc);
+ PangoFontDescription *font_desc;
+ gchar *font_str_actual;
+
+ if (save) {
+ g_free (note->font);
+ note->font = font_str ? g_strdup (font_str) : NULL;
+
+ gtk_widget_set_sensitive (note->w_font_label,
+ note->font != NULL);
+ gtk_widget_set_sensitive (note->w_font,
+ note->font != NULL);
+ }
+
+ /* If "force_default" is enabled or font_str is NULL,
+ * then we use the default font instead of font_str. */
+ if (!font_str || g_settings_get_boolean (stickynotes->settings,
+ "force-default")) {
+ if (g_settings_get_boolean (stickynotes->settings,
+ "use-system-font"))
+ font_str_actual = NULL;
+ else
+ font_str_actual = g_settings_get_string (stickynotes->settings,
+ "default-font");
+ } else
+ font_str_actual = g_strdup (font_str);
+
+ /* Do not use custom fonts if "use_system_font" is enabled */
+ font_desc = font_str_actual ?
+ pango_font_description_from_string (font_str_actual): NULL;
+
+ /* Apply the style to the widgets */
+ gtk_widget_override_font (note->w_window, font_desc);
+ gtk_widget_override_font (note->w_body, font_desc);
+
+ g_free (font_str_actual);
+ pango_font_description_free (font_desc);
}
/* Lock/Unlock a sticky note from editing */
-void stickynote_set_locked(StickyNote *note, gboolean locked)
+void
+stickynote_set_locked (StickyNote *note,
+ gboolean locked)
{
- note->locked = locked;
-
- /* Set cursor visibility and editability */
- gtk_text_view_set_editable(GTK_TEXT_VIEW(note->w_body), !locked);
- gtk_text_view_set_cursor_visible(GTK_TEXT_VIEW(note->w_body), !locked);
-
- /* Show appropriate icon and tooltip */
- if (locked) {
- gtk_image_set_from_icon_name (note->img_lock, STICKYNOTES_STOCK_LOCKED, GTK_ICON_SIZE_MENU);
- gtk_widget_set_tooltip_text(note->w_lock, _("This note is locked."));
- }
- else {
- gtk_image_set_from_icon_name (note->img_lock, STICKYNOTES_STOCK_UNLOCKED, GTK_ICON_SIZE_MENU);
- gtk_widget_set_tooltip_text(note->w_lock, _("This note is unlocked."));
- }
-
- gtk_image_set_pixel_size (note->img_lock, STICKYNOTES_ICON_SIZE);
-
- gtk_toggle_action_set_active(note->ta_lock_toggle_item, locked);
-
- stickynotes_applet_update_menus();
+ note->locked = locked;
+
+ /* Set cursor visibility and editability */
+ gtk_text_view_set_editable (GTK_TEXT_VIEW (note->w_body),
+ !locked);
+ gtk_text_view_set_cursor_visible (GTK_TEXT_VIEW (note->w_body),
+ !locked);
+
+ /* Show appropriate icon and tooltip */
+ if (locked) {
+ gtk_image_set_from_icon_name (note->img_lock,
+ STICKYNOTES_STOCK_LOCKED,
+ GTK_ICON_SIZE_MENU);
+ gtk_widget_set_tooltip_text (note->w_lock,
+ _("This note is locked."));
+ } else {
+ gtk_image_set_from_icon_name (note->img_lock,
+ STICKYNOTES_STOCK_UNLOCKED,
+ GTK_ICON_SIZE_MENU);
+ gtk_widget_set_tooltip_text (note->w_lock,
+ _("This note is unlocked."));
+ }
+
+ gtk_image_set_pixel_size (note->img_lock,
+ STICKYNOTES_ICON_SIZE);
+
+ gtk_toggle_action_set_active (note->ta_lock_toggle_item,
+ locked);
+
+ stickynotes_applet_update_menus ();
}
/* Show/Hide a sticky note */
void
-stickynote_set_visible (StickyNote *note, gboolean visible)
+stickynote_set_visible (StickyNote *note,
+ gboolean visible)
{
- if (visible)
- {
- gtk_window_present (GTK_WINDOW (note->w_window));
-
- if (note->x != -1 || note->y != -1)
- gtk_window_move (GTK_WINDOW (note->w_window),
- note->x, note->y);
- /* Put the note on all workspaces if necessary. */
- if (g_settings_get_boolean (stickynotes->settings, "sticky"))
- gtk_window_stick(GTK_WINDOW(note->w_window));
- else if (note->workspace > 0)
- {
-#if 0
- WnckWorkspace *wnck_ws;
- gulong xid;
- WnckWindow *wnck_win;
- WnckScreen *wnck_screen;
-
- g_print ("set_visible(): workspace = %i\n",
- note->workspace);
-
- xid = GDK_WINDOW_XID (note->w_window->window);
- wnck_screen = wnck_screen_get_default ();
- wnck_win = wnck_window_get (xid);
- wnck_ws = wnck_screen_get_workspace (
- wnck_screen,
- note->workspace - 1);
- if (wnck_win && wnck_ws)
- wnck_window_move_to_workspace (
- wnck_win, wnck_ws);
- else
- g_print ("set_visible(): errr\n");
-#endif
- xstuff_change_workspace (GTK_WINDOW (note->w_window),
- note->workspace - 1);
- }
- }
- else {
- /* Hide sticky note */
- int x, y, width, height;
- stickynotes_applet_panel_icon_get_geometry (&x, &y, &width, &height);
- set_icon_geometry (gtk_widget_get_window (GTK_WIDGET (note->w_window)),
- x, y, width, height);
- gtk_window_iconify(GTK_WINDOW (note->w_window));
- }
+ if (visible) {
+ gtk_window_present (GTK_WINDOW (note->w_window));
+
+ if (note->x != -1 || note->y != -1)
+ gtk_window_move (GTK_WINDOW (note->w_window),
+ note->x, note->y);
+
+ /* Put the note on all workspaces if necessary. */
+ if (g_settings_get_boolean (stickynotes->settings, "sticky"))
+ gtk_window_stick (GTK_WINDOW (note->w_window));
+
+ else if (note->workspace > 0)
+ xstuff_change_workspace (GTK_WINDOW (note->w_window),
+ note->workspace - 1);
+ } else {
+ /* Hide sticky note */
+ int x, y, width, height;
+
+ stickynotes_applet_panel_icon_get_geometry (&x, &y,
+ &width, &height);
+ set_icon_geometry (gtk_widget_get_window (GTK_WIDGET (note->w_window)),
+ x, y, width, height);
+ gtk_window_iconify (GTK_WINDOW (note->w_window));
+ }
}
/* Add a sticky note */
-void stickynotes_add (GdkScreen *screen)
+void
+stickynotes_add (GdkScreen *screen)
{
- StickyNote *note;
+ StickyNote *note;
- note = stickynote_new (screen);
+ note = stickynote_new (screen);
- stickynotes->notes = g_list_append(stickynotes->notes, note);
- stickynotes_applet_update_tooltips();
- stickynotes_save();
- stickynote_set_visible (note, TRUE);
+ stickynotes->notes = g_list_append (stickynotes->notes, note);
+ stickynotes_applet_update_tooltips ();
+ stickynotes_save ();
+ stickynote_set_visible (note, TRUE);
}
/* Remove a sticky note with confirmation, if needed */
-void stickynotes_remove(StickyNote *note)
+void
+stickynotes_remove (StickyNote *note)
{
- GtkBuilder *builder;
- GtkWidget *dialog;
+ GtkBuilder *builder;
+ GtkWidget *dialog;
- builder = gtk_builder_new ();
- gtk_builder_add_from_resource (builder, GRESOURCE "sticky-notes-delete.ui", NULL);
+ builder = gtk_builder_new ();
+ gtk_builder_add_from_resource (builder,
+ GRESOURCE "sticky-notes-delete.ui",
+ NULL);
- dialog = GTK_WIDGET (gtk_builder_get_object (builder, "delete_dialog"));
+ dialog = GTK_WIDGET (gtk_builder_get_object (builder,
+ "delete_dialog"));
- gtk_window_set_transient_for(GTK_WINDOW(dialog), GTK_WINDOW(note->w_window));
+ gtk_window_set_transient_for (GTK_WINDOW (dialog),
+ GTK_WINDOW (note->w_window));
- if (stickynote_get_empty(note)
- || !g_settings_get_boolean (stickynotes->settings, "confirm-deletion")
- || gtk_dialog_run(GTK_DIALOG(dialog)) == GTK_RESPONSE_OK) {
+ if (stickynote_get_empty (note)
+ || !g_settings_get_boolean (stickynotes->settings,
+ "confirm-deletion")
+ || gtk_dialog_run (GTK_DIALOG (dialog)) == GTK_RESPONSE_OK) {
- /* Remove the note from the linked-list of all notes */
- stickynotes->notes = g_list_remove_all (stickynotes->notes, note);
+ /* Remove the note from the linked-list of all notes */
+ stickynotes->notes = g_list_remove_all (stickynotes->notes,
+ note);
- /* Destroy the note */
- stickynote_free (note);
+ /* Destroy the note */
+ stickynote_free (note);
- /* Update tooltips */
- stickynotes_applet_update_tooltips();
+ /* Update tooltips */
+ stickynotes_applet_update_tooltips ();
- /* Save notes */
- stickynotes_save();
- }
+ /* Save notes */
+ stickynotes_save ();
+ }
- gtk_widget_destroy(dialog);
- g_object_unref(builder);
+ gtk_widget_destroy (dialog);
+ g_object_unref (builder);
}
/* Save all sticky notes in an XML configuration file */
gboolean
stickynotes_save_now (void)
{
- WnckScreen *wnck_screen;
- const gchar *title;
- GtkTextBuffer *buffer;
- GtkTextIter start, end;
- gchar *body;
-
- gint i;
-
- /* Create a new XML document */
- xmlDocPtr doc = xmlNewDoc(XML_CHAR ("1.0"));
- xmlNodePtr root = xmlNewDocNode(doc, NULL, XML_CHAR ("stickynotes"), NULL);
-
- xmlDocSetRootElement(doc, root);
- xmlNewProp(root, XML_CHAR("version"), XML_CHAR (VERSION));
-
- wnck_screen = wnck_screen_get_default ();
- wnck_screen_force_update (wnck_screen);
-
- /* For all sticky notes */
- for (i = 0; i < g_list_length(stickynotes->notes); i++) {
- WnckWindow *wnck_win;
- gulong xid = 0;
-
- /* Access the current note in the list */
- StickyNote *note = g_list_nth_data(stickynotes->notes, i);
-
- /* Retrieve the window size of the note */
- gchar *w_str = g_strdup_printf("%d", note->w);
- gchar *h_str = g_strdup_printf("%d", note->h);
-
- /* Retrieve the window position of the note */
- gchar *x_str = g_strdup_printf("%d", note->x);
- gchar *y_str = g_strdup_printf("%d", note->y);
-
- xid = GDK_WINDOW_XID (gtk_widget_get_window (note->w_window));
- wnck_win = wnck_window_get (xid);
-
- if (!g_settings_get_boolean (stickynotes->settings, "sticky") &&
- wnck_win)
- note->workspace = 1 +
- wnck_workspace_get_number (
- wnck_window_get_workspace (wnck_win));
- else
- note->workspace = 0;
-
- /* Retrieve the title of the note */
- title = gtk_label_get_text(GTK_LABEL(note->w_title));
-
- /* Retrieve body contents of the note */
- buffer = gtk_text_view_get_buffer(GTK_TEXT_VIEW(note->w_body));
-
- gtk_text_buffer_get_bounds(buffer, &start, &end);
- body = gtk_text_iter_get_text(&start, &end);
-
- /* Save the note as a node in the XML document */
- {
- xmlNodePtr node = xmlNewTextChild(root, NULL, XML_CHAR ("note"),
- XML_CHAR (body));
- xmlNewProp(node, XML_CHAR ("title"), XML_CHAR (title));
- if (note->color)
- xmlNewProp (node, XML_CHAR ("color"), XML_CHAR (note->color));
- if (note->font_color)
- xmlNewProp (node, XML_CHAR ("font_color"),
- XML_CHAR (note->font_color));
- if (note->font)
- xmlNewProp (node, XML_CHAR ("font"), XML_CHAR (note->font));
- if (note->locked)
- xmlNewProp (node, XML_CHAR ("locked"), XML_CHAR ("true"));
- xmlNewProp (node, XML_CHAR ("x"), XML_CHAR (x_str));
- xmlNewProp (node, XML_CHAR ("y"), XML_CHAR (y_str));
- xmlNewProp (node, XML_CHAR ("w"), XML_CHAR (w_str));
- xmlNewProp (node, XML_CHAR ("h"), XML_CHAR (h_str));
- if (note->workspace > 0)
- {
- char *workspace_str;
-
- workspace_str = g_strdup_printf ("%i",
- note->workspace);
- xmlNewProp (node, XML_CHAR ("workspace"), XML_CHAR (workspace_str));
- g_free (workspace_str);
- }
- }
-
- /* Now that it has been saved, reset the modified flag */
- gtk_text_buffer_set_modified(buffer, FALSE);
-
- g_free(x_str);
- g_free(y_str);
- g_free(w_str);
- g_free(h_str);
- g_free(body);
- }
-
- /* The XML file is $HOME/.config/mate/stickynotes-applet, most probably */
- {
- gchar* path = g_build_filename(g_get_user_config_dir(), "mate", NULL);
- gchar* file = g_build_filename(path, "stickynotes-applet.xml", NULL);
- g_mkdir_with_parents(path, S_IRWXU);
- g_free(path);
-
- xmlSaveFormatFile(file, doc, 1);
-
- g_free(file);
- }
-
- xmlFreeDoc(doc);
-
- save_scheduled = FALSE;
-
- return FALSE;
+ WnckScreen *wnck_screen;
+ const gchar *title;
+ GtkTextBuffer *buffer;
+ GtkTextIter start, end;
+ gchar *body;
+
+ gint i;
+
+ /* Create a new XML document */
+ xmlDocPtr doc = xmlNewDoc (XML_CHAR ("1.0"));
+ xmlNodePtr root = xmlNewDocNode (doc, NULL, XML_CHAR ("stickynotes"), NULL);
+
+ xmlDocSetRootElement (doc, root);
+ xmlNewProp (root, XML_CHAR ("version"), XML_CHAR (VERSION));
+
+ wnck_screen = wnck_screen_get_default ();
+ wnck_screen_force_update (wnck_screen);
+
+ /* For all sticky notes */
+ for (i = 0; i < g_list_length (stickynotes->notes); i++) {
+ WnckWindow *wnck_win;
+ gulong xid = 0;
+
+ /* Access the current note in the list */
+ StickyNote *note = g_list_nth_data (stickynotes->notes, i);
+
+ /* Retrieve the window size of the note */
+ gchar *w_str = g_strdup_printf ("%d", note->w);
+ gchar *h_str = g_strdup_printf ("%d", note->h);
+
+ /* Retrieve the window position of the note */
+ gchar *x_str = g_strdup_printf ("%d", note->x);
+ gchar *y_str = g_strdup_printf ("%d", note->y);
+
+ xid = GDK_WINDOW_XID (gtk_widget_get_window (note->w_window));
+ wnck_win = wnck_window_get (xid);
+
+ if (!g_settings_get_boolean (stickynotes->settings, "sticky") && wnck_win)
+ note->workspace = 1 +
+ wnck_workspace_get_number (wnck_window_get_workspace (wnck_win));
+ else
+ note->workspace = 0;
+
+ /* Retrieve the title of the note */
+ title = gtk_label_get_text (GTK_LABEL (note->w_title));
+
+ /* Retrieve body contents of the note */
+ buffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW (note->w_body));
+
+ gtk_text_buffer_get_bounds (buffer, &start, &end);
+ body = gtk_text_iter_get_text (&start, &end);
+
+ /* Save the note as a node in the XML document */
+ {
+ xmlNodePtr node = xmlNewTextChild (root, NULL,
+ XML_CHAR ("note"),
+ XML_CHAR (body));
+
+ xmlNewProp (node, XML_CHAR ("title"),
+ XML_CHAR (title));
+
+ if (note->color)
+ xmlNewProp (node, XML_CHAR ("color"),
+ XML_CHAR (note->color));
+
+ if (note->font_color)
+ xmlNewProp (node, XML_CHAR ("font_color"),
+ XML_CHAR (note->font_color));
+
+ if (note->font)
+ xmlNewProp (node, XML_CHAR ("font"),
+ XML_CHAR (note->font));
+
+ if (note->locked)
+ xmlNewProp (node, XML_CHAR ("locked"),
+ XML_CHAR ("true"));
+
+ xmlNewProp (node, XML_CHAR ("x"), XML_CHAR (x_str));
+ xmlNewProp (node, XML_CHAR ("y"), XML_CHAR (y_str));
+ xmlNewProp (node, XML_CHAR ("w"), XML_CHAR (w_str));
+ xmlNewProp (node, XML_CHAR ("h"), XML_CHAR (h_str));
+ if (note->workspace > 0) {
+ char *workspace_str;
+
+ workspace_str = g_strdup_printf ("%i", note->workspace);
+ xmlNewProp (node, XML_CHAR ("workspace"), XML_CHAR (workspace_str));
+ g_free (workspace_str);
+ }
+ }
+
+ /* Now that it has been saved, reset the modified flag */
+ gtk_text_buffer_set_modified (buffer, FALSE);
+
+ g_free (x_str);
+ g_free (y_str);
+ g_free (w_str);
+ g_free (h_str);
+ g_free (body);
+ }
+
+ /* The XML file is $HOME/.config/mate/stickynotes-applet,
+ most probably */
+ {
+ gchar* path = g_build_filename (g_get_user_config_dir (),
+ "mate", NULL);
+ gchar* file = g_build_filename (path, "stickynotes-applet.xml",
+ NULL);
+ g_mkdir_with_parents (path, S_IRWXU);
+ g_free (path);
+
+ xmlSaveFormatFile (file, doc, 1);
+
+ g_free (file);
+ }
+
+ xmlFreeDoc (doc);
+
+ save_scheduled = FALSE;
+
+ return FALSE;
}
void
stickynotes_save (void)
{
- /* If a save isn't already scheduled, save everything a minute from now. */
- if (!save_scheduled) {
- g_timeout_add_seconds (60, (GSourceFunc) stickynotes_save_now, NULL);
- save_scheduled = TRUE;
- }
+ /* If a save isn't already scheduled, save everything a minute from now. */
+ if (!save_scheduled) {
+ g_timeout_add_seconds (60, (GSourceFunc) stickynotes_save_now, NULL);
+ save_scheduled = TRUE;
+ }
}
/* Load all sticky notes from an XML configuration file */
void
stickynotes_load (GdkScreen *screen)
{
- xmlDocPtr doc = NULL;
- xmlNodePtr root;
- xmlNodePtr node;
- /* WnckScreen *wnck_screen; */
- GList *new_notes, *tmp1; /* Lists of StickyNote*'s */
- GList *new_nodes; /* Lists of xmlNodePtr's */
- int x, y, w, h;
-
- /* The XML file is $HOME/.config/mate/stickynotes-applet, most probably */
- {
- gchar* file = g_build_filename(g_get_user_config_dir(), "mate", "stickynotes-applet.xml", NULL);
-
- if (g_file_test(file, G_FILE_TEST_EXISTS))
- {
- /* load file */
- doc = xmlParseFile(file);
- }
- else
- {
- /* old one */
- g_free(file);
-
- file = g_build_filename(g_get_home_dir(), ".mate2", "stickynotes_applet", NULL);
-
- if (g_file_test(file, G_FILE_TEST_EXISTS))
- {
- /* load file */
- doc = xmlParseFile(file);
- }
- }
-
- g_free(file);
- }
-
- /* If the XML file does not exist, create a blank one */
- if (!doc)
- {
- stickynotes_save();
- return;
- }
-
- /* If the XML file is corrupted/incorrect, create a blank one */
- root = xmlDocGetRootElement(doc);
- if (!root || xmlStrcmp(root->name, XML_CHAR ("stickynotes")))
- {
- xmlFreeDoc(doc);
- stickynotes_save();
- return;
- }
-
- node = root->xmlChildrenNode;
-
- /* For all children of the root node (ie all sticky notes) */
- new_notes = NULL;
- new_nodes = NULL;
- while (node) {
- if (!xmlStrcmp(node->name, (const xmlChar *) "note"))
- {
- StickyNote *note;
-
- /* Retrieve and set the window size of the note */
- {
- gchar *w_str = (gchar *)xmlGetProp (node, XML_CHAR ("w"));
- gchar *h_str = (gchar *)xmlGetProp (node, XML_CHAR ("h"));
- if (w_str && h_str)
- {
- w = atoi (w_str);
- h = atoi (h_str);
- }
- else
- {
- w = 0;
- h = 0;
- }
-
- g_free (w_str);
- g_free (h_str);
- }
-
- /* Retrieve and set the window position of the note */
- {
- gchar *x_str = (gchar *)xmlGetProp (node, XML_CHAR ("x"));
- gchar *y_str = (gchar *)xmlGetProp (node, XML_CHAR ("y"));
-
- if (x_str && y_str)
- {
- x = atoi (x_str);
- y = atoi (y_str);
- }
- else
- {
- x = -1;
- y = -1;
- }
-
- g_free (x_str);
- g_free (y_str);
- }
-
- /* Create a new note */
- note = stickynote_new_aux (screen, x, y, w, h);
- stickynotes->notes = g_list_append (stickynotes->notes,
- note);
- new_notes = g_list_append (new_notes, note);
- new_nodes = g_list_append (new_nodes, node);
-
- /* Retrieve and set title of the note */
- {
- gchar *title = (gchar *)xmlGetProp(node, XML_CHAR ("title"));
- if (title)
- stickynote_set_title (note, title);
- g_free (title);
- }
-
- /* Retrieve and set the color of the note */
- {
- gchar *color_str;
- gchar *font_color_str;
-
- color_str = (gchar *)xmlGetProp (node, XML_CHAR ("color"));
- font_color_str = (gchar *)xmlGetProp (node, XML_CHAR ("font_color"));
-
- if (color_str || font_color_str)
- stickynote_set_color (note,
- color_str,
- font_color_str,
- TRUE);
- g_free (color_str);
- g_free (font_color_str);
- }
-
- /* Retrieve and set the font of the note */
- {
- gchar *font_str = (gchar *)xmlGetProp (node, XML_CHAR ("font"));
- if (font_str)
- stickynote_set_font (note, font_str,
- TRUE);
- g_free (font_str);
- }
-
- /* Retrieve the workspace */
- {
- char *workspace_str;
-
- workspace_str = (gchar *)xmlGetProp (node, XML_CHAR ("workspace"));
- if (workspace_str)
- {
- note->workspace = atoi (workspace_str);
- g_free (workspace_str);
- }
- }
-
- /* Retrieve and set (if any) the body contents of the
- * note */
- {
- gchar *body = (gchar *)xmlNodeListGetString(doc,
- node->xmlChildrenNode, 1);
- if (body) {
- GtkTextBuffer *buffer;
- GtkTextIter start, end;
-
- buffer = gtk_text_view_get_buffer(
- GTK_TEXT_VIEW(note->w_body));
- gtk_text_buffer_get_bounds(
- buffer, &start, &end);
- gtk_text_buffer_insert(buffer,
- &start, body, -1);
- }
- g_free(body);
- }
-
- /* Retrieve and set the locked state of the note,
- * by default unlocked */
- {
- gchar *locked = (gchar *)xmlGetProp(node, XML_CHAR ("locked"));
- if (locked)
- stickynote_set_locked(note,
- !strcmp(locked, "true"));
- g_free(locked);
- }
- }
-
- node = node->next;
- }
-
- tmp1 = new_notes;
- /*
- wnck_screen = wnck_screen_get_default ();
- wnck_screen_force_update (wnck_screen);
- */
-
- while (tmp1)
- {
- StickyNote *note = tmp1->data;
-
- stickynote_set_visible (note, stickynotes->visible);
- tmp1 = tmp1->next;
- }
-
- g_list_free (new_notes);
- g_list_free (new_nodes);
-
- xmlFreeDoc(doc);
+ xmlDocPtr doc = NULL;
+ xmlNodePtr root;
+ xmlNodePtr node;
+ /* WnckScreen *wnck_screen; */
+ GList *new_notes, *tmp1; /* Lists of StickyNote*'s */
+ GList *new_nodes; /* Lists of xmlNodePtr's */
+ int x, y, w, h;
+
+ /* The XML file is $HOME/.config/mate/stickynotes-applet, most probably */
+ gchar* file = g_build_filename (g_get_user_config_dir (),
+ "mate", "stickynotes-applet.xml", NULL);
+
+ if (g_file_test (file, G_FILE_TEST_EXISTS)) {
+ /* load file */
+ doc = xmlParseFile (file);
+ } else {
+ /* old one */
+ g_free (file);
+
+ file = g_build_filename (g_get_home_dir (),
+ ".mate2", "stickynotes_applet", NULL);
+
+ if (g_file_test (file, G_FILE_TEST_EXISTS)) {
+ /* load file */
+ doc = xmlParseFile (file);
+ }
+ }
+ g_free (file);
+
+ /* If the XML file does not exist, create a blank one */
+ if (!doc) {
+ stickynotes_save ();
+ return;
+ }
+
+ /* If the XML file is corrupted/incorrect, create a blank one */
+ root = xmlDocGetRootElement (doc);
+ if (!root || xmlStrcmp (root->name, XML_CHAR ("stickynotes"))) {
+ xmlFreeDoc (doc);
+ stickynotes_save ();
+ return;
+ }
+
+ node = root->xmlChildrenNode;
+
+ /* For all children of the root node (ie all sticky notes) */
+ new_notes = NULL;
+ new_nodes = NULL;
+ while (node) {
+ if (!xmlStrcmp (node->name, (const xmlChar *) "note")) {
+ StickyNote *note;
+
+ /* Retrieve and set the window size of the note */
+ {
+ gchar *w_str = (gchar *)xmlGetProp (node, XML_CHAR ("w"));
+ gchar *h_str = (gchar *)xmlGetProp (node, XML_CHAR ("h"));
+ if (w_str && h_str) {
+ w = atoi (w_str);
+ h = atoi (h_str);
+ } else {
+ w = 0;
+ h = 0;
+ }
+
+ g_free (w_str);
+ g_free (h_str);
+ }
+
+ /* Retrieve and set the window position of the note */
+ {
+ gchar *x_str = (gchar *)xmlGetProp (node, XML_CHAR ("x"));
+ gchar *y_str = (gchar *)xmlGetProp (node, XML_CHAR ("y"));
+
+ if (x_str && y_str) {
+ x = atoi (x_str);
+ y = atoi (y_str);
+ } else {
+ x = -1;
+ y = -1;
+ }
+
+ g_free (x_str);
+ g_free (y_str);
+ }
+
+ /* Create a new note */
+ note = stickynote_new_aux (screen, x, y, w, h);
+ stickynotes->notes = g_list_append (stickynotes->notes,
+ note);
+ new_notes = g_list_append (new_notes, note);
+ new_nodes = g_list_append (new_nodes, node);
+
+ /* Retrieve and set title of the note */
+ {
+ gchar *title = (gchar *)xmlGetProp (node,
+ XML_CHAR ("title"));
+ if (title)
+ stickynote_set_title (note, title);
+
+ g_free (title);
+ }
+
+ /* Retrieve and set the color of the note */
+ {
+ gchar *color_str;
+ gchar *font_color_str;
+
+ color_str = (gchar *)xmlGetProp (node, XML_CHAR ("color"));
+ font_color_str = (gchar *)xmlGetProp (node, XML_CHAR ("font_color"));
+
+ if (color_str || font_color_str)
+ stickynote_set_color (note,
+ color_str,
+ font_color_str,
+ TRUE);
+
+ g_free (color_str);
+ g_free (font_color_str);
+ }
+
+ /* Retrieve and set the font of the note */
+ {
+ gchar *font_str = (gchar *)xmlGetProp (node,
+ XML_CHAR ("font"));
+ if (font_str)
+ stickynote_set_font (note, font_str, TRUE);
+
+ g_free (font_str);
+ }
+
+ /* Retrieve the workspace */
+ {
+ char *workspace_str;
+
+ workspace_str = (gchar *)xmlGetProp (node,
+ XML_CHAR ("workspace"));
+ if (workspace_str) {
+ note->workspace = atoi (workspace_str);
+ g_free (workspace_str);
+ }
+ }
+
+ /* Retrieve and set (if any) the body contents of the
+ * note */
+ {
+ gchar *body = (gchar *)xmlNodeListGetString (doc,
+ node->xmlChildrenNode,
+ 1);
+ if (body) {
+ GtkTextBuffer *buffer;
+ GtkTextIter start, end;
+
+ buffer = gtk_text_view_get_buffer (
+ GTK_TEXT_VIEW (note->w_body));
+ gtk_text_buffer_get_bounds (buffer,
+ &start, &end);
+ gtk_text_buffer_insert (buffer,
+ &start, body, -1);
+ }
+ g_free (body);
+ }
+
+ /* Retrieve and set the locked state of the note,
+ * by default unlocked */
+ {
+ gchar *locked = (gchar *)xmlGetProp (node,
+ XML_CHAR ("locked"));
+ if (locked)
+ stickynote_set_locked (note,
+ !strcmp (locked,
+ "true"));
+ g_free (locked);
+ }
+ }
+
+ node = node->next;
+ }
+
+ tmp1 = new_notes;
+ /*
+ wnck_screen = wnck_screen_get_default ();
+ wnck_screen_force_update (wnck_screen);
+ */
+
+ while (tmp1) {
+ StickyNote *note = tmp1->data;
+
+ stickynote_set_visible (note, stickynotes->visible);
+ tmp1 = tmp1->next;
+ }
+
+ g_list_free (new_notes);
+ g_list_free (new_nodes);
+
+ xmlFreeDoc (doc);
}