summaryrefslogtreecommitdiff
path: root/libmate-desktop/mate-colorseldialog.c
diff options
context:
space:
mode:
authorStefano Karapetsas <[email protected]>2014-05-04 19:00:57 +0200
committerStefano Karapetsas <[email protected]>2014-05-04 19:00:57 +0200
commit64dfc3d24b51456f5a90fa1a59771db1ef1d980c (patch)
tree2d00f4e1133aef8954054fca33f0c68d81b9896d /libmate-desktop/mate-colorseldialog.c
parentcdc44ec777ed31e5e720fbede2ee6116bd43330d (diff)
downloadmate-desktop-64dfc3d24b51456f5a90fa1a59771db1ef1d980c.tar.bz2
mate-desktop-64dfc3d24b51456f5a90fa1a59771db1ef1d980c.tar.xz
libmate-desktop: Add MateColorButton dialog
Code taken from GTK 2.24 source and renamed for MATE This will allow to use traditional color selection with GTK2 and GTK3
Diffstat (limited to 'libmate-desktop/mate-colorseldialog.c')
-rw-r--r--libmate-desktop/mate-colorseldialog.c228
1 files changed, 228 insertions, 0 deletions
diff --git a/libmate-desktop/mate-colorseldialog.c b/libmate-desktop/mate-colorseldialog.c
new file mode 100644
index 0000000..6758602
--- /dev/null
+++ b/libmate-desktop/mate-colorseldialog.c
@@ -0,0 +1,228 @@
+/* GTK - The GIMP Toolkit
+ * Copyright (C) 1995-1997 Peter Mattis, Spencer Kimball and Josh MacDonald
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library 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
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+/*
+ * Modified by the GTK+ Team and others 1997-2000. See the AUTHORS
+ * file for a list of people on the GTK+ Team. See the ChangeLog
+ * files for a list of changes. These files are distributed with
+ * GTK+ at ftp://ftp.gtk.org/pub/gtk/.
+ */
+#include "config.h"
+#include "private.h"
+#include <string.h>
+#include <glib.h>
+#include <gtk/gtk.h>
+#include <glib/gi18n-lib.h>
+#include "mate-colorsel.h"
+#include "mate-colorseldialog.h"
+
+enum {
+ PROP_0,
+ PROP_COLOR_SELECTION,
+ PROP_OK_BUTTON,
+ PROP_CANCEL_BUTTON,
+ PROP_HELP_BUTTON
+};
+
+
+/***************************/
+/* MateColorSelectionDialog */
+/***************************/
+
+static void mate_color_selection_dialog_buildable_interface_init (GtkBuildableIface *iface);
+static GObject * mate_color_selection_dialog_buildable_get_internal_child (GtkBuildable *buildable,
+ GtkBuilder *builder,
+ const gchar *childname);
+
+G_DEFINE_TYPE_WITH_CODE (MateColorSelectionDialog, mate_color_selection_dialog,
+ GTK_TYPE_DIALOG,
+ G_IMPLEMENT_INTERFACE (GTK_TYPE_BUILDABLE,
+ mate_color_selection_dialog_buildable_interface_init))
+
+static GtkBuildableIface *parent_buildable_iface;
+
+static void
+mate_color_selection_dialog_get_property (GObject *object,
+ guint prop_id,
+ GValue *value,
+ GParamSpec *pspec)
+{
+ MateColorSelectionDialog *colorsel;
+
+ colorsel = MATE_COLOR_SELECTION_DIALOG (object);
+
+ switch (prop_id)
+ {
+ case PROP_COLOR_SELECTION:
+ g_value_set_object (value, colorsel->colorsel);
+ break;
+ case PROP_OK_BUTTON:
+ g_value_set_object (value, colorsel->ok_button);
+ break;
+ case PROP_CANCEL_BUTTON:
+ g_value_set_object (value, colorsel->cancel_button);
+ break;
+ case PROP_HELP_BUTTON:
+ g_value_set_object (value, colorsel->help_button);
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ break;
+ }
+}
+
+static void
+mate_color_selection_dialog_class_init (MateColorSelectionDialogClass *klass)
+{
+ GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
+ gobject_class->get_property = mate_color_selection_dialog_get_property;
+
+ g_object_class_install_property (gobject_class,
+ PROP_COLOR_SELECTION,
+ g_param_spec_object ("color-selection",
+ _("Color Selection"),
+ _("The color selection embedded in the dialog."),
+ GTK_TYPE_WIDGET,
+ G_PARAM_READABLE));
+ g_object_class_install_property (gobject_class,
+ PROP_OK_BUTTON,
+ g_param_spec_object ("ok-button",
+ _("OK Button"),
+ _("The OK button of the dialog."),
+ GTK_TYPE_WIDGET,
+ G_PARAM_READABLE));
+ g_object_class_install_property (gobject_class,
+ PROP_CANCEL_BUTTON,
+ g_param_spec_object ("cancel-button",
+ _("Cancel Button"),
+ _("The cancel button of the dialog."),
+ GTK_TYPE_WIDGET,
+ G_PARAM_READABLE));
+ g_object_class_install_property (gobject_class,
+ PROP_HELP_BUTTON,
+ g_param_spec_object ("help-button",
+ _("Help Button"),
+ _("The help button of the dialog."),
+ GTK_TYPE_WIDGET,
+ G_PARAM_READABLE));
+}
+
+static void
+mate_color_selection_dialog_init (MateColorSelectionDialog *colorseldiag)
+{
+ GtkDialog *dialog = GTK_DIALOG (colorseldiag);
+
+ _mate_desktop_init_i18n ();
+
+ gtk_container_set_border_width (GTK_CONTAINER (dialog), 5);
+ gtk_box_set_spacing (GTK_BOX (dialog->vbox), 2); /* 2 * 5 + 2 = 12 */
+ gtk_container_set_border_width (GTK_CONTAINER (dialog->action_area), 5);
+ gtk_box_set_spacing (GTK_BOX (dialog->action_area), 6);
+
+ colorseldiag->colorsel = mate_color_selection_new ();
+ gtk_container_set_border_width (GTK_CONTAINER (colorseldiag->colorsel), 5);
+ mate_color_selection_set_has_palette (MATE_COLOR_SELECTION(colorseldiag->colorsel), FALSE);
+ mate_color_selection_set_has_opacity_control (MATE_COLOR_SELECTION(colorseldiag->colorsel), FALSE);
+ gtk_container_add (GTK_CONTAINER (GTK_DIALOG (colorseldiag)->vbox), colorseldiag->colorsel);
+ gtk_widget_show (colorseldiag->colorsel);
+
+ colorseldiag->cancel_button = gtk_dialog_add_button (GTK_DIALOG (colorseldiag),
+ GTK_STOCK_CANCEL,
+ GTK_RESPONSE_CANCEL);
+
+ colorseldiag->ok_button = gtk_dialog_add_button (GTK_DIALOG (colorseldiag),
+ GTK_STOCK_OK,
+ GTK_RESPONSE_OK);
+
+ gtk_widget_grab_default (colorseldiag->ok_button);
+
+ colorseldiag->help_button = gtk_dialog_add_button (GTK_DIALOG (colorseldiag),
+ GTK_STOCK_HELP,
+ GTK_RESPONSE_HELP);
+
+ gtk_widget_hide (colorseldiag->help_button);
+
+ gtk_dialog_set_alternative_button_order (GTK_DIALOG (colorseldiag),
+ GTK_RESPONSE_OK,
+ GTK_RESPONSE_CANCEL,
+ GTK_RESPONSE_HELP,
+ -1);
+
+ gtk_window_set_title (GTK_WINDOW (colorseldiag),
+ _("Color Selection"));
+
+ //_gtk_dialog_set_ignore_separator (dialog, TRUE);
+}
+
+GtkWidget*
+mate_color_selection_dialog_new (const gchar *title)
+{
+ MateColorSelectionDialog *colorseldiag;
+
+ colorseldiag = g_object_new (MATE_TYPE_COLOR_SELECTION_DIALOG, NULL);
+
+ if (title)
+ gtk_window_set_title (GTK_WINDOW (colorseldiag), title);
+
+ gtk_window_set_resizable (GTK_WINDOW (colorseldiag), FALSE);
+
+ return GTK_WIDGET (colorseldiag);
+}
+
+/**
+ * mate_color_selection_dialog_get_color_selection:
+ * @colorsel: a #MateColorSelectionDialog
+ *
+ * Retrieves the #MateColorSelection widget embedded in the dialog.
+ *
+ * Returns: (transfer none): the embedded #MateColorSelection
+ *
+ * Since: 2.14
+ **/
+GtkWidget*
+mate_color_selection_dialog_get_color_selection (MateColorSelectionDialog *colorsel)
+{
+ g_return_val_if_fail (MATE_IS_COLOR_SELECTION_DIALOG (colorsel), NULL);
+
+ return colorsel->colorsel;
+}
+
+static void
+mate_color_selection_dialog_buildable_interface_init (GtkBuildableIface *iface)
+{
+ parent_buildable_iface = g_type_interface_peek_parent (iface);
+ iface->get_internal_child = mate_color_selection_dialog_buildable_get_internal_child;
+}
+
+static GObject *
+mate_color_selection_dialog_buildable_get_internal_child (GtkBuildable *buildable,
+ GtkBuilder *builder,
+ const gchar *childname)
+{
+ if (strcmp(childname, "ok_button") == 0)
+ return G_OBJECT (MATE_COLOR_SELECTION_DIALOG (buildable)->ok_button);
+ else if (strcmp(childname, "cancel_button") == 0)
+ return G_OBJECT (MATE_COLOR_SELECTION_DIALOG (buildable)->cancel_button);
+ else if (strcmp(childname, "help_button") == 0)
+ return G_OBJECT (MATE_COLOR_SELECTION_DIALOG(buildable)->help_button);
+ else if (strcmp(childname, "color_selection") == 0)
+ return G_OBJECT (MATE_COLOR_SELECTION_DIALOG(buildable)->colorsel);
+
+ return parent_buildable_iface->get_internal_child (buildable, builder, childname);
+}