/* Sticky Window Callback : Lock/Unlock the window */ gboolean stickynote_toggle_lock_cb (GtkWidget *widget, StickyNote *note) { stickynote_set_locked (note, !note->locked); return TRUE; }
/* Popup Menu Callback : Lock/Unlock selected sticky note */ void popup_toggle_lock_cb(GtkToggleAction *action, StickyNote *note) { stickynote_set_locked(note, gtk_toggle_action_get_active(action)); }
/* Preferences Callback : Apply to existing notes. */ void preferences_apply_cb(GConfClient *client, guint cnxn_id, GConfEntry *entry, gpointer data) { GList *l; StickyNote *note; if (!strcmp (entry->key, GCONF_PATH "/settings/sticky")) { if (gconf_value_get_bool(entry->value)) 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 (entry->key, GCONF_PATH "/settings/locked")) { for (l = stickynotes->notes; l; l = l->next) { note = l->data; stickynote_set_locked (note, gconf_value_get_bool (entry->value)); } stickynotes_save(); } else if (!strcmp (entry->key, GCONF_PATH "/settings/use_system_color") || !strcmp (entry->key, GCONF_PATH "/defaults/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 (entry->key, GCONF_PATH "/settings/use_system_font") || !strcmp (entry->key, GCONF_PATH "/defaults/font")) { for (l = stickynotes->notes; l; l = l->next) { note = l->data; stickynote_set_font (note, note->font, FALSE); } } else if (!strcmp (entry->key, GCONF_PATH "/settings/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_prefs(); stickynotes_applet_update_menus(); }
/* Preferences Callback : Apply to existing notes. */ void preferences_apply_cb(GSettings *settings, gchar *key, gpointer data) { GList *l; StickyNote *note; if (!strcmp (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, "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, "use-system-color") || !strcmp (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, "use-system-font") || !strcmp (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, "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_prefs(); stickynotes_applet_update_menus(); }
/* 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 *note; GtkBuilder *builder; note = g_new (StickyNote, 1); builder = gtk_builder_new (); gtk_builder_add_from_file (builder, BUILDER_PATH, 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 (>K_CHECK_BUTTON ( gtk_builder_get_object (builder, "def_color_check"))->toggle_button); note->w_def_font = GTK_WIDGET (>K_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; }