|
Packit |
1e8aac |
/*
|
|
Packit |
1e8aac |
* Copyright (C) 2008 Tristan Van Berkom.
|
|
Packit |
1e8aac |
*
|
|
Packit |
1e8aac |
* This library is free software; you can redistribute it and/or modify it
|
|
Packit |
1e8aac |
* under the terms of the GNU Lesser General Public License as
|
|
Packit |
1e8aac |
* published by the Free Software Foundation; either version 2.1 of
|
|
Packit |
1e8aac |
* the License, or (at your option) any later version.
|
|
Packit |
1e8aac |
*
|
|
Packit |
1e8aac |
* This library is distributed in the hope that it will be useful, but
|
|
Packit |
1e8aac |
* WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
Packit |
1e8aac |
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
Packit |
1e8aac |
* Lesser General Public License for more details.
|
|
Packit |
1e8aac |
*
|
|
Packit |
1e8aac |
* You should have received a copy of the GNU Lesser General Public
|
|
Packit |
1e8aac |
* License along with this program; if not, write to the Free Software
|
|
Packit |
1e8aac |
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
|
Packit |
1e8aac |
*
|
|
Packit |
1e8aac |
* Authors:
|
|
Packit |
1e8aac |
* Tristan Van Berkom <tvb@gnome.org>
|
|
Packit |
1e8aac |
*/
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
#include <config.h>
|
|
Packit |
1e8aac |
#include <gladeui/glade.h>
|
|
Packit |
1e8aac |
#include <glib/gi18n-lib.h>
|
|
Packit |
1e8aac |
#include <gdk/gdkkeysyms.h>
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
#include "glade-widget-editor.h"
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
static void glade_widget_editor_finalize (GObject * object);
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
static void glade_widget_editor_editable_init (GladeEditableIface * iface);
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
static void markup_toggled (GtkWidget * widget, GladeWidgetEditor * widget_editor);
|
|
Packit |
1e8aac |
static void custom_tooltip_toggled (GtkWidget * widget, GladeWidgetEditor * widget_editor);
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
struct _GladeWidgetEditorPrivate
|
|
Packit |
1e8aac |
{
|
|
Packit |
1e8aac |
GtkWidget *custom_tooltip_check;
|
|
Packit |
1e8aac |
GtkWidget *tooltip_markup_check;
|
|
Packit |
1e8aac |
GtkWidget *tooltip_label_notebook;
|
|
Packit |
1e8aac |
GtkWidget *tooltip_editor_notebook;
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
/* GtkContainer common properties */
|
|
Packit |
1e8aac |
GtkWidget *resize_mode_label;
|
|
Packit |
1e8aac |
GtkWidget *resize_mode_editor;
|
|
Packit |
1e8aac |
GtkWidget *border_width_label;
|
|
Packit |
1e8aac |
GtkWidget *border_width_editor;
|
|
Packit |
1e8aac |
};
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
static GladeEditableIface *parent_editable_iface;
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
#define TOOLTIP_TEXT_PAGE 0
|
|
Packit |
1e8aac |
#define TOOLTIP_MARKUP_PAGE 1
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
G_DEFINE_TYPE_WITH_CODE (GladeWidgetEditor, glade_widget_editor, GLADE_TYPE_EDITOR_SKELETON,
|
|
Packit |
1e8aac |
G_ADD_PRIVATE (GladeWidgetEditor)
|
|
Packit |
1e8aac |
G_IMPLEMENT_INTERFACE (GLADE_TYPE_EDITABLE,
|
|
Packit |
1e8aac |
glade_widget_editor_editable_init));
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
static void
|
|
Packit |
1e8aac |
glade_widget_editor_class_init (GladeWidgetEditorClass * klass)
|
|
Packit |
1e8aac |
{
|
|
Packit |
1e8aac |
GObjectClass *object_class = G_OBJECT_CLASS (klass);
|
|
Packit |
1e8aac |
GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass);
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
object_class->finalize = glade_widget_editor_finalize;
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
gtk_widget_class_set_template_from_resource (widget_class, "/org/gnome/gladegtk/glade-widget-editor.ui");
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
gtk_widget_class_bind_template_child_private (widget_class, GladeWidgetEditor, custom_tooltip_check);
|
|
Packit |
1e8aac |
gtk_widget_class_bind_template_child_private (widget_class, GladeWidgetEditor, tooltip_markup_check);
|
|
Packit |
1e8aac |
gtk_widget_class_bind_template_child_private (widget_class, GladeWidgetEditor, tooltip_label_notebook);
|
|
Packit |
1e8aac |
gtk_widget_class_bind_template_child_private (widget_class, GladeWidgetEditor, tooltip_editor_notebook);
|
|
Packit |
1e8aac |
gtk_widget_class_bind_template_child_private (widget_class, GladeWidgetEditor, resize_mode_label);
|
|
Packit |
1e8aac |
gtk_widget_class_bind_template_child_private (widget_class, GladeWidgetEditor, resize_mode_editor);
|
|
Packit |
1e8aac |
gtk_widget_class_bind_template_child_private (widget_class, GladeWidgetEditor, border_width_label);
|
|
Packit |
1e8aac |
gtk_widget_class_bind_template_child_private (widget_class, GladeWidgetEditor, border_width_editor);
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
gtk_widget_class_bind_template_callback (widget_class, markup_toggled);
|
|
Packit |
1e8aac |
gtk_widget_class_bind_template_callback (widget_class, custom_tooltip_toggled);
|
|
Packit |
1e8aac |
}
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
static void
|
|
Packit |
1e8aac |
glade_widget_editor_init (GladeWidgetEditor * self)
|
|
Packit |
1e8aac |
{
|
|
Packit |
1e8aac |
self->priv = glade_widget_editor_get_instance_private (self);
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
gtk_widget_init_template (GTK_WIDGET (self));
|
|
Packit |
1e8aac |
}
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
static void
|
|
Packit |
1e8aac |
glade_widget_editor_load (GladeEditable * editable, GladeWidget * gwidget)
|
|
Packit |
1e8aac |
{
|
|
Packit |
1e8aac |
GladeWidgetEditor *widget_editor = GLADE_WIDGET_EDITOR (editable);
|
|
Packit |
1e8aac |
GladeWidgetEditorPrivate *priv = widget_editor->priv;
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
/* Chain up to default implementation */
|
|
Packit |
1e8aac |
parent_editable_iface->load (editable, gwidget);
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
if (gwidget)
|
|
Packit |
1e8aac |
{
|
|
Packit |
1e8aac |
GtkWidget *widget = (GtkWidget *)glade_widget_get_object (gwidget);
|
|
Packit |
1e8aac |
gboolean is_container = GTK_IS_CONTAINER (widget);
|
|
Packit |
1e8aac |
gboolean tooltip_markup = FALSE;
|
|
Packit |
1e8aac |
gboolean custom_tooltip = FALSE;
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
glade_widget_property_get (gwidget, "glade-tooltip-markup", &tooltip_markup);
|
|
Packit |
1e8aac |
glade_widget_property_get (gwidget, "has-tooltip", &custom_tooltip);
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (priv->tooltip_markup_check), tooltip_markup);
|
|
Packit |
1e8aac |
gtk_notebook_set_current_page (GTK_NOTEBOOK (priv->tooltip_label_notebook),
|
|
Packit |
1e8aac |
tooltip_markup ? TOOLTIP_MARKUP_PAGE : TOOLTIP_TEXT_PAGE);
|
|
Packit |
1e8aac |
gtk_notebook_set_current_page (GTK_NOTEBOOK (priv->tooltip_editor_notebook),
|
|
Packit |
1e8aac |
tooltip_markup ? TOOLTIP_MARKUP_PAGE : TOOLTIP_TEXT_PAGE);
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (priv->custom_tooltip_check), custom_tooltip);
|
|
Packit |
1e8aac |
gtk_widget_set_sensitive (priv->tooltip_markup_check, !custom_tooltip);
|
|
Packit |
1e8aac |
gtk_widget_set_sensitive (priv->tooltip_label_notebook, !custom_tooltip);
|
|
Packit |
1e8aac |
gtk_widget_set_sensitive (priv->tooltip_editor_notebook, !custom_tooltip);
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
/* Set visibility of GtkContainer only properties */
|
|
Packit |
1e8aac |
gtk_widget_set_visible (priv->resize_mode_label, is_container);
|
|
Packit |
1e8aac |
gtk_widget_set_visible (priv->resize_mode_editor, is_container);
|
|
Packit |
1e8aac |
gtk_widget_set_visible (priv->border_width_label, is_container);
|
|
Packit |
1e8aac |
gtk_widget_set_visible (priv->border_width_editor, is_container);
|
|
Packit |
1e8aac |
}
|
|
Packit |
1e8aac |
}
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
static void
|
|
Packit |
1e8aac |
glade_widget_editor_editable_init (GladeEditableIface * iface)
|
|
Packit |
1e8aac |
{
|
|
Packit |
1e8aac |
parent_editable_iface = g_type_interface_peek_parent (iface);
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
iface->load = glade_widget_editor_load;
|
|
Packit |
1e8aac |
}
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
static void
|
|
Packit |
1e8aac |
glade_widget_editor_finalize (GObject * object)
|
|
Packit |
1e8aac |
{
|
|
Packit |
1e8aac |
glade_editable_load (GLADE_EDITABLE (object), NULL);
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
G_OBJECT_CLASS (glade_widget_editor_parent_class)->finalize (object);
|
|
Packit |
1e8aac |
}
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
static void
|
|
Packit |
1e8aac |
custom_tooltip_toggled (GtkWidget *widget,
|
|
Packit |
1e8aac |
GladeWidgetEditor *widget_editor)
|
|
Packit |
1e8aac |
{
|
|
Packit |
1e8aac |
GladeProperty *property;
|
|
Packit |
1e8aac |
GladeWidget *gwidget = glade_editable_loaded_widget (GLADE_EDITABLE (widget_editor));
|
|
Packit |
1e8aac |
gboolean active;
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
if (glade_editable_loading (GLADE_EDITABLE (widget_editor)) || !gwidget)
|
|
Packit |
1e8aac |
return;
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
active = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (widget));
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
glade_editable_block (GLADE_EDITABLE (widget_editor));
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
if (active)
|
|
Packit |
1e8aac |
{
|
|
Packit |
1e8aac |
glade_command_push_group (_("Setting %s to use a custom tooltip"),
|
|
Packit |
1e8aac |
glade_widget_get_name (gwidget));
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
/* clear out some things... */
|
|
Packit |
1e8aac |
property = glade_widget_get_property (gwidget, "tooltip-text");
|
|
Packit |
1e8aac |
glade_command_set_property (property, NULL);
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
property = glade_widget_get_property (gwidget, "tooltip-markup");
|
|
Packit |
1e8aac |
glade_command_set_property (property, NULL);
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
property = glade_widget_get_property (gwidget, "glade-tooltip-markup");
|
|
Packit |
1e8aac |
glade_command_set_property (property, FALSE);
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
property = glade_widget_get_property (gwidget, "has-tooltip");
|
|
Packit |
1e8aac |
glade_command_set_property (property, TRUE);
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
glade_command_pop_group ();
|
|
Packit |
1e8aac |
}
|
|
Packit |
1e8aac |
else
|
|
Packit |
1e8aac |
{
|
|
Packit |
1e8aac |
glade_command_push_group (_("Setting %s to use a custom tooltip"),
|
|
Packit |
1e8aac |
glade_widget_get_name (gwidget));
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
/* clear out some things... */
|
|
Packit |
1e8aac |
property = glade_widget_get_property (gwidget, "tooltip-text");
|
|
Packit |
1e8aac |
glade_command_set_property (property, NULL);
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
property = glade_widget_get_property (gwidget, "tooltip-markup");
|
|
Packit |
1e8aac |
glade_command_set_property (property, NULL);
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
property = glade_widget_get_property (gwidget, "glade-tooltip-markup");
|
|
Packit |
1e8aac |
glade_command_set_property (property, FALSE);
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
property = glade_widget_get_property (gwidget, "has-tooltip");
|
|
Packit |
1e8aac |
glade_command_set_property (property, FALSE);
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
glade_command_pop_group ();
|
|
Packit |
1e8aac |
}
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
glade_editable_unblock (GLADE_EDITABLE (widget_editor));
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
/* reload widgets and sensitivity and stuff... */
|
|
Packit |
1e8aac |
glade_editable_load (GLADE_EDITABLE (widget_editor), gwidget);
|
|
Packit |
1e8aac |
}
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
static void
|
|
Packit |
1e8aac |
transfer_text_property (GladeWidget *gwidget,
|
|
Packit |
1e8aac |
const gchar *from,
|
|
Packit |
1e8aac |
const gchar *to)
|
|
Packit |
1e8aac |
{
|
|
Packit |
1e8aac |
gchar *value = NULL;
|
|
Packit |
1e8aac |
gchar *comment = NULL, *context = NULL;
|
|
Packit |
1e8aac |
gboolean translatable = FALSE;
|
|
Packit |
1e8aac |
GladeProperty *prop_from;
|
|
Packit |
1e8aac |
GladeProperty *prop_to;
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
prop_from = glade_widget_get_property (gwidget, from);
|
|
Packit |
1e8aac |
prop_to = glade_widget_get_property (gwidget, to);
|
|
Packit |
1e8aac |
g_assert (prop_from);
|
|
Packit |
1e8aac |
g_assert (prop_to);
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
glade_property_get (prop_from, &value);
|
|
Packit |
1e8aac |
comment = (gchar *)glade_property_i18n_get_comment (prop_from);
|
|
Packit |
1e8aac |
context = (gchar *)glade_property_i18n_get_context (prop_from);
|
|
Packit |
1e8aac |
translatable = glade_property_i18n_get_translatable (prop_from);
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
/* Get our own copies */
|
|
Packit |
1e8aac |
value = g_strdup (value);
|
|
Packit |
1e8aac |
context = g_strdup (context);
|
|
Packit |
1e8aac |
comment = g_strdup (comment);
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
/* Set target values */
|
|
Packit |
1e8aac |
glade_command_set_property (prop_to, value);
|
|
Packit |
1e8aac |
glade_command_set_i18n (prop_to, translatable, context, comment);
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
/* Clear source values */
|
|
Packit |
1e8aac |
glade_command_set_property (prop_from, NULL);
|
|
Packit |
1e8aac |
glade_command_set_i18n (prop_from, TRUE, NULL, NULL);
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
g_free (value);
|
|
Packit |
1e8aac |
g_free (comment);
|
|
Packit |
1e8aac |
g_free (context);
|
|
Packit |
1e8aac |
}
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
static void
|
|
Packit |
1e8aac |
markup_toggled (GtkWidget *widget,
|
|
Packit |
1e8aac |
GladeWidgetEditor *widget_editor)
|
|
Packit |
1e8aac |
{
|
|
Packit |
1e8aac |
GladeProperty *property;
|
|
Packit |
1e8aac |
GladeWidget *gwidget = glade_editable_loaded_widget (GLADE_EDITABLE (widget_editor));
|
|
Packit |
1e8aac |
gboolean active;
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
if (glade_editable_loading (GLADE_EDITABLE (widget_editor)) || !gwidget)
|
|
Packit |
1e8aac |
return;
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
active = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (widget));
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
glade_editable_block (GLADE_EDITABLE (widget_editor));
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
if (active)
|
|
Packit |
1e8aac |
{
|
|
Packit |
1e8aac |
glade_command_push_group (_("Setting %s to use tooltip markup"),
|
|
Packit |
1e8aac |
glade_widget_get_name (gwidget));
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
transfer_text_property (gwidget, "tooltip-text", "tooltip-markup");
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
property = glade_widget_get_property (gwidget, "glade-tooltip-markup");
|
|
Packit |
1e8aac |
glade_command_set_property (property, TRUE);
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
glade_command_pop_group ();
|
|
Packit |
1e8aac |
}
|
|
Packit |
1e8aac |
else
|
|
Packit |
1e8aac |
{
|
|
Packit |
1e8aac |
glade_command_push_group (_("Setting %s to not use tooltip markup"),
|
|
Packit |
1e8aac |
glade_widget_get_name (gwidget));
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
transfer_text_property (gwidget, "tooltip-markup", "tooltip-text");
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
property = glade_widget_get_property (gwidget, "glade-tooltip-markup");
|
|
Packit |
1e8aac |
glade_command_set_property (property, FALSE);
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
glade_command_pop_group ();
|
|
Packit |
1e8aac |
}
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
glade_editable_unblock (GLADE_EDITABLE (widget_editor));
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
/* reload widgets and sensitivity and stuff... */
|
|
Packit |
1e8aac |
glade_editable_load (GLADE_EDITABLE (widget_editor), gwidget);
|
|
Packit |
1e8aac |
}
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
GtkWidget *
|
|
Packit |
1e8aac |
glade_widget_editor_new (void)
|
|
Packit |
1e8aac |
{
|
|
Packit |
1e8aac |
return g_object_new (GLADE_TYPE_WIDGET_EDITOR, NULL);
|
|
Packit |
1e8aac |
}
|