[Goodies-commits] r7476 - in xfce4-notes-plugin/trunk: . panel-plugin
Mike Massonnet
mmassonnet at xfce.org
Sat Jun 6 17:59:38 CEST 2009
Author: mmassonnet
Date: 2009-06-06 15:59:38 +0000 (Sat, 06 Jun 2009)
New Revision: 7476
Added:
xfce4-notes-plugin/trunk/panel-plugin/xfce4-notes-settings.c
Removed:
xfce4-notes-plugin/trunk/panel-plugin/settings-dialog.c
Modified:
xfce4-notes-plugin/trunk/ChangeLog
xfce4-notes-plugin/trunk/panel-plugin/Makefile.am
Log:
Rename settings-dialog.c to its homonyme executable
Modified: xfce4-notes-plugin/trunk/ChangeLog
===================================================================
--- xfce4-notes-plugin/trunk/ChangeLog 2009-06-06 15:51:48 UTC (rev 7475)
+++ xfce4-notes-plugin/trunk/ChangeLog 2009-06-06 15:59:38 UTC (rev 7476)
@@ -1,5 +1,9 @@
2009-06-06 Mike Massonnet <mmassonnet at xfce.org>
+Rename settings-dialog.c to its homonyme executable
+
+2009-06-06 Mike Massonnet <mmassonnet at xfce.org>
+
Made the settings dialog a standalone application
* configure.in.in:
- Set Xfconf required.
Modified: xfce4-notes-plugin/trunk/panel-plugin/Makefile.am
===================================================================
--- xfce4-notes-plugin/trunk/panel-plugin/Makefile.am 2009-06-06 15:51:48 UTC (rev 7475)
+++ xfce4-notes-plugin/trunk/panel-plugin/Makefile.am 2009-06-06 15:59:38 UTC (rev 7476)
@@ -24,7 +24,7 @@
xfce4_notes_settings_SOURCES = \
color.c \
color.h \
- settings-dialog.c
+ xfce4-notes-settings.c
xfce4_notes_settings_CFLAGS = \
@GTK_CFLAGS@ \
Copied: xfce4-notes-plugin/trunk/panel-plugin/xfce4-notes-settings.c (from rev 7474, xfce4-notes-plugin/trunk/panel-plugin/settings-dialog.c)
===================================================================
--- xfce4-notes-plugin/trunk/panel-plugin/xfce4-notes-settings.c (rev 0)
+++ xfce4-notes-plugin/trunk/panel-plugin/xfce4-notes-settings.c 2009-06-06 15:59:38 UTC (rev 7476)
@@ -0,0 +1,429 @@
+/*
+ * Notes - panel plugin for Xfce Desktop Environment
+ * Copyright (C) 2008-2009 Mike Massonnet <mmassonnet at gmail.com>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include <xfconf/xfconf.h>
+#include <gtk/gtk.h>
+#include <libxfcegui4/libxfcegui4.h>
+
+#include "defines.h"
+#include "color.h"
+
+enum
+{
+ COMBOBOX_SIZE_SMALL,
+ COMBOBOX_SIZE_NORMAL,
+ COMBOBOX_SIZE_LARGE,
+};
+
+static GtkWidget *size_combo_box_new ();
+static void cb_size_combobox_changed (GtkComboBox *combobox, gpointer data);
+
+enum
+{
+ COMBOBOX_BACKGROUND_YELLOW,
+ COMBOBOX_BACKGROUND_RED,
+ COMBOBOX_BACKGROUND_BLUE,
+ COMBOBOX_BACKGROUND_GREEN,
+ COMBOBOX_BACKGROUND_PURPLE,
+ COMBOBOX_BACKGROUND_WHITE,
+ COMBOBOX_BACKGROUND_CUSTOM,
+};
+
+static GtkWidget *background_combo_box_new ();
+static void cb_background_changed (GtkComboBox *combobox, gpointer data);
+
+static GtkWidget *background_dialog_new ();
+static gchar *background_dialog_get_color (GtkColorSelectionDialog *dialog);
+static void cb_selection_changed (GtkColorSelection *selection, gpointer data);
+
+static GtkWidget *color_button_new ();
+static gboolean cb_color_button_pressed (GtkButton *button, GdkEventButton *event, gpointer data);
+
+static XfconfChannel *xfconf_channel = NULL;
+static GtkWidget *color_combobox = NULL;
+static GtkWidget *color_button = NULL;
+
+GtkWidget *
+prop_dialog_new ()
+{
+ GtkWidget *dialog, *notebook, *vbox, *frame, *box, *hbox, *button, *label;
+
+ /* Configuration channel */
+ if (NULL == xfconf_channel)
+ xfconf_channel = xfconf_channel_new_with_property_base ("xfce4-panel", "/plugins/notes");
+
+ /* Dialog */
+ dialog =
+ xfce_titled_dialog_new_with_buttons (_("Notes"), NULL,
+ GTK_DIALOG_DESTROY_WITH_PARENT|GTK_DIALOG_NO_SEPARATOR,
+ GTK_STOCK_CLOSE, GTK_RESPONSE_OK,
+ NULL);
+ xfce_titled_dialog_set_subtitle (XFCE_TITLED_DIALOG (dialog), _("Configure the plugin"));
+ gtk_window_set_icon_name (GTK_WINDOW (dialog), "xfce4-notes-plugin");
+ gtk_window_set_position (GTK_WINDOW (dialog), GTK_WIN_POS_CENTER);
+ gtk_window_set_resizable (GTK_WINDOW (dialog), FALSE);
+ gtk_window_stick (GTK_WINDOW (dialog));
+
+ /* Notebook */
+ notebook = gtk_notebook_new ();
+ gtk_notebook_set_show_tabs (GTK_NOTEBOOK (notebook), FALSE);
+ gtk_notebook_set_show_border (GTK_NOTEBOOK (notebook), FALSE);
+ gtk_container_set_border_width (GTK_CONTAINER (notebook), 0);
+ gtk_container_add (GTK_CONTAINER (GTK_DIALOG (dialog)->vbox), notebook);
+
+ /* VBox */
+ vbox = gtk_vbox_new (FALSE, 0);
+ gtk_container_add (GTK_CONTAINER (notebook), vbox);
+
+ /* === Global settings === */
+ box = gtk_vbox_new (FALSE, BORDER);
+ frame = xfce_create_framebox_with_content (_("Global settings"), box);
+ gtk_container_set_border_width (GTK_CONTAINER (frame), BORDER);
+ gtk_container_add (GTK_CONTAINER (vbox), frame);
+
+ /* Hide from taskbar */
+ button = gtk_check_button_new_with_label (_("Hide notes from taskbar"));
+ gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (button), GENERAL_HIDE_FROM_TASKBAR);
+ xfconf_g_property_bind (xfconf_channel, "/global/skip-taskbar-hint",
+ G_TYPE_BOOLEAN, G_OBJECT (button), "active");
+ gtk_box_pack_start (GTK_BOX (box), button, TRUE, FALSE, 0);
+
+ /* Background color */
+ hbox = gtk_hbox_new (FALSE, BORDER);
+ gtk_box_pack_start (GTK_BOX (box), hbox, TRUE, FALSE, 0);
+
+ label = gtk_label_new (_("Background:"));
+ gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 0);
+
+ color_combobox = background_combo_box_new ();
+ gtk_box_pack_start (GTK_BOX (hbox), color_combobox, FALSE, FALSE, 0);
+
+ color_button = color_button_new ();
+ gtk_box_pack_start (GTK_BOX (hbox), color_button, FALSE, FALSE, 0);
+
+ /* Font description */
+ hbox = gtk_hbox_new (FALSE, BORDER);
+ gtk_box_pack_start (GTK_BOX (box), hbox, TRUE, FALSE, 0);
+
+ label = gtk_label_new (_("Font:"));
+ gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 0);
+
+ button = gtk_font_button_new_with_font ("Sans 12");
+ xfconf_g_property_bind (xfconf_channel, "/global/font-description",
+ G_TYPE_STRING, G_OBJECT (button), "font-name");
+ gtk_box_pack_start (GTK_BOX (hbox), button, FALSE, FALSE, 0);
+
+ /* === New window settings === */
+ box = gtk_vbox_new (FALSE, BORDER);
+ frame = xfce_create_framebox_with_content (_("New group settings"), box);
+ gtk_container_set_border_width (GTK_CONTAINER (frame), BORDER);
+ gtk_container_add (GTK_CONTAINER (vbox), frame);
+
+ /* Always on top */
+ button = gtk_check_button_new_with_label (_("Always on top"));
+ gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (button), NEW_WINDOW_ABOVE);
+ xfconf_g_property_bind (xfconf_channel, "/new-window/always-on-top",
+ G_TYPE_BOOLEAN, G_OBJECT (button), "active");
+ gtk_box_pack_start (GTK_BOX (box), button, TRUE, FALSE, 0);
+
+ /* Sticky window */
+ button = gtk_check_button_new_with_label (_("Sticky"));
+ gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (button), NEW_WINDOW_STICKY);
+ xfconf_g_property_bind (xfconf_channel, "/new-window/sticky",
+ G_TYPE_BOOLEAN, G_OBJECT (button), "active");
+ gtk_box_pack_start (GTK_BOX (box), button, TRUE, FALSE, 0);
+
+ /* Size */
+ hbox = gtk_hbox_new (FALSE, BORDER);
+ gtk_box_pack_start (GTK_BOX (box), hbox, TRUE, FALSE, 0);
+
+ label = gtk_label_new (_("Size:"));
+ gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 0);
+
+ button = size_combo_box_new ();
+ gtk_box_pack_start (GTK_BOX (hbox), button, FALSE, FALSE, 0);
+
+ /* === Ending === */
+ gtk_widget_show_all (GTK_DIALOG (dialog)->vbox);
+
+ return dialog;
+}
+
+static GtkWidget *
+size_combo_box_new ()
+{
+ GtkWidget *combobox;
+ gint size;
+
+ combobox = gtk_combo_box_new_text ();
+ gtk_combo_box_append_text (GTK_COMBO_BOX (combobox), _("Small"));
+ gtk_combo_box_append_text (GTK_COMBO_BOX (combobox), _("Normal"));
+ gtk_combo_box_append_text (GTK_COMBO_BOX (combobox), _("Large"));
+
+ size = xfconf_channel_get_int (xfconf_channel, "/new-window/width", SIZE_NORMAL);
+ if (size == SIZE_SMALL)
+ gtk_combo_box_set_active (GTK_COMBO_BOX (combobox), COMBOBOX_SIZE_SMALL);
+ else if (size == SIZE_NORMAL)
+ gtk_combo_box_set_active (GTK_COMBO_BOX (combobox), COMBOBOX_SIZE_NORMAL);
+ else if (size == SIZE_LARGE)
+ gtk_combo_box_set_active (GTK_COMBO_BOX (combobox), COMBOBOX_SIZE_LARGE);
+
+ g_signal_connect (combobox, "changed", G_CALLBACK (cb_size_combobox_changed), NULL);
+
+ return combobox;
+}
+
+static void
+cb_size_combobox_changed (GtkComboBox *combobox,
+ gpointer data)
+{
+ gint id;
+ gint width = 0, height = 0;
+
+ id = gtk_combo_box_get_active (combobox);
+
+ if (id < 0 || id > COMBOBOX_SIZE_LARGE)
+ {
+ g_critical ("Trying to set a default size but got an invalid item");
+ return;
+ }
+
+ if (id == COMBOBOX_SIZE_SMALL)
+ {
+ width = SIZE_SMALL;
+ height = (gint)width*SIZE_FACTOR;
+ }
+ else if (id == COMBOBOX_SIZE_NORMAL)
+ {
+ width = SIZE_NORMAL;
+ height = (gint)width*SIZE_FACTOR;
+ }
+ else if (id == COMBOBOX_SIZE_LARGE)
+ {
+ width = SIZE_LARGE;
+ height = (gint)width*SIZE_FACTOR;
+ }
+
+ xfconf_channel_set_int (xfconf_channel, "/new-window/width", width);
+ xfconf_channel_set_int (xfconf_channel, "/new-window/height", height);
+}
+
+static GtkWidget *
+background_combo_box_new ()
+{
+ GtkWidget *combobox;
+ gchar *color;
+ gint id;
+
+ combobox = gtk_combo_box_new_text ();
+ gtk_combo_box_append_text (GTK_COMBO_BOX (combobox), _("Yellow"));
+ gtk_combo_box_append_text (GTK_COMBO_BOX (combobox), _("Red"));
+ gtk_combo_box_append_text (GTK_COMBO_BOX (combobox), _("Blue"));
+ gtk_combo_box_append_text (GTK_COMBO_BOX (combobox), _("Green"));
+ gtk_combo_box_append_text (GTK_COMBO_BOX (combobox), _("Purple"));
+ gtk_combo_box_append_text (GTK_COMBO_BOX (combobox), _("White"));
+ gtk_combo_box_append_text (GTK_COMBO_BOX (combobox), _("Custom..."));
+
+ color = xfconf_channel_get_string (xfconf_channel, "/global/background-color", GENERAL_BACKGROUND_COLOR);
+ if (!g_ascii_strcasecmp (color, BACKGROUND_YELLOW))
+ id = COMBOBOX_BACKGROUND_YELLOW;
+ else if (!g_ascii_strcasecmp (color, BACKGROUND_RED))
+ id = COMBOBOX_BACKGROUND_RED;
+ else if (!g_ascii_strcasecmp (color, BACKGROUND_BLUE))
+ id = COMBOBOX_BACKGROUND_BLUE;
+ else if (!g_ascii_strcasecmp (color, BACKGROUND_GREEN))
+ id = COMBOBOX_BACKGROUND_GREEN;
+ else if (!g_ascii_strcasecmp (color, BACKGROUND_PURPLE))
+ id = COMBOBOX_BACKGROUND_PURPLE;
+ else if (!g_ascii_strcasecmp (color, BACKGROUND_WHITE))
+ id = COMBOBOX_BACKGROUND_WHITE;
+ else
+ id = COMBOBOX_BACKGROUND_CUSTOM;
+ gtk_combo_box_set_active (GTK_COMBO_BOX (combobox), id);
+ g_free (color);
+
+ g_signal_connect (combobox, "changed", G_CALLBACK (cb_background_changed), NULL);
+
+ return combobox;
+}
+
+static void
+cb_background_changed (GtkComboBox *combobox,
+ gpointer data)
+{
+ GtkWidget *dialog;
+ GdkColor gdkcolor;
+ gchar *color = NULL;
+ gint id;
+
+ id = gtk_combo_box_get_active (combobox);
+
+ if (id < 0 || id > COMBOBOX_BACKGROUND_CUSTOM)
+ {
+ g_critical ("Trying to set a default background but got an invalid item");
+ return;
+ }
+
+ if (id == COMBOBOX_BACKGROUND_YELLOW)
+ color = BACKGROUND_YELLOW;
+ else if (id == COMBOBOX_BACKGROUND_RED)
+ color = BACKGROUND_RED;
+ else if (id == COMBOBOX_BACKGROUND_BLUE)
+ color = BACKGROUND_BLUE;
+ else if (id == COMBOBOX_BACKGROUND_GREEN)
+ color = BACKGROUND_GREEN;
+ else if (id == COMBOBOX_BACKGROUND_PURPLE)
+ color = BACKGROUND_PURPLE;
+ else if (id == COMBOBOX_BACKGROUND_WHITE)
+ color = BACKGROUND_WHITE;
+ else if (id == COMBOBOX_BACKGROUND_CUSTOM)
+ {
+ dialog = background_dialog_new ();
+ gtk_window_set_transient_for (GTK_WINDOW (dialog), GTK_WINDOW (gtk_widget_get_toplevel (GTK_WIDGET (combobox))));
+ gtk_window_set_modal (GTK_WINDOW (dialog), TRUE);
+ gtk_window_set_position (GTK_WINDOW (dialog), GTK_WIN_POS_CENTER_ON_PARENT);
+
+ if (gtk_dialog_run (GTK_DIALOG (dialog)) == GTK_RESPONSE_OK)
+ {
+ color = background_dialog_get_color (GTK_COLOR_SELECTION_DIALOG (dialog));
+ gdk_color_parse (color, &gdkcolor);
+ xfconf_channel_set_string (xfconf_channel, "/global/background-color", color);
+ g_free (color);
+
+ gtk_color_button_set_color (GTK_COLOR_BUTTON (color_button), &gdkcolor);
+ }
+
+ gtk_widget_destroy (dialog);
+ return;
+ }
+
+ xfconf_channel_set_string (xfconf_channel, "/global/background-color", color);
+
+ gdk_color_parse (color, &gdkcolor);
+ gtk_color_button_set_color (GTK_COLOR_BUTTON (color_button), &gdkcolor);
+}
+
+static GtkWidget *
+background_dialog_new ()
+{
+ GtkWidget *dialog;
+ GtkWidget *selection;
+ GdkColor gdkcolor;
+ gchar *color;
+
+ dialog = gtk_color_selection_dialog_new (_("Background Color"));
+
+ selection = gtk_color_selection_dialog_get_color_selection (GTK_COLOR_SELECTION_DIALOG (dialog));
+ gtk_color_selection_set_has_opacity_control (GTK_COLOR_SELECTION (selection), FALSE);
+ g_signal_connect (selection, "color-changed", G_CALLBACK (cb_selection_changed), NULL);
+
+ color = xfconf_channel_get_string (xfconf_channel, "/global/background-color", GENERAL_BACKGROUND_COLOR);
+ gdk_color_parse (color, &gdkcolor);
+ gtk_color_selection_set_current_color (GTK_COLOR_SELECTION (selection), &gdkcolor);
+ g_free (color);
+
+ return dialog;
+}
+
+static gchar *
+background_dialog_get_color (GtkColorSelectionDialog *dialog)
+{
+ GtkWidget *selection;
+ GdkColor color;
+
+ selection = gtk_color_selection_dialog_get_color_selection (GTK_COLOR_SELECTION_DIALOG (dialog));
+ gtk_color_selection_get_current_color (GTK_COLOR_SELECTION (selection), &color);
+
+ return gdk_color_to_string (&color);
+}
+
+static void
+cb_selection_changed (GtkColorSelection *selection,
+ gpointer data)
+{
+ GdkColor color, *color2;
+
+ gtk_color_selection_get_current_color (selection, &color);
+
+ color2 = gdk_color_copy (&color);
+ __gdk_color_contrast (color2, 5.);
+
+ gtk_color_selection_set_previous_color (selection, color2);
+
+ gdk_color_free (color2);
+}
+
+static GtkWidget *
+color_button_new ()
+{
+ GtkWidget *button;
+ GdkColor gdkcolor;
+ gchar *color;
+
+ color = xfconf_channel_get_string (xfconf_channel, "/global/background-color", GENERAL_BACKGROUND_COLOR);
+ gdk_color_parse (color, &gdkcolor);
+ g_free (color);
+
+ button = gtk_color_button_new_with_color (&gdkcolor);
+ gtk_button_set_relief (GTK_BUTTON (button), GTK_RELIEF_NONE);
+
+ g_signal_connect (button, "button-press-event", G_CALLBACK (cb_color_button_pressed), NULL);
+
+ return button;
+}
+
+static gboolean
+cb_color_button_pressed (GtkButton *button,
+ GdkEventButton *event,
+ gpointer data)
+{
+ gint id;
+
+ if (event->button != 1)
+ return TRUE;
+
+ id = gtk_combo_box_get_active (GTK_COMBO_BOX (color_combobox));
+
+ if (id == COMBOBOX_BACKGROUND_CUSTOM)
+ cb_background_changed (GTK_COMBO_BOX (color_combobox), NULL);
+ else
+ gtk_combo_box_set_active (GTK_COMBO_BOX (color_combobox), COMBOBOX_BACKGROUND_CUSTOM);
+
+ return TRUE;
+}
+
+
+
+gint main (gint argc,
+ gchar *argv[])
+{
+ GtkWidget *dialog;
+ xfconf_init (NULL);
+ gtk_init (&argc, &argv);
+ dialog = prop_dialog_new ();
+ gtk_dialog_run (GTK_DIALOG (dialog));
+ gtk_widget_destroy (dialog);
+ xfconf_shutdown ();
+ return 0;
+}
+
More information about the Goodies-commits
mailing list