|
Packit |
1e8aac |
#include <config.h>
|
|
Packit |
1e8aac |
#include <glib/gi18n-lib.h>
|
|
Packit |
1e8aac |
#include <gladeui/glade.h>
|
|
Packit |
1e8aac |
#include "glade-gtk.h"
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
#include "glade-header-bar-editor.h"
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
#define TITLE_DISABLED_MESSAGE _("This property does not apply when a custom title is set")
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
/* Uncomment to enable debug tracing of add/remove/replace children */
|
|
Packit |
1e8aac |
//#define d(x) x
|
|
Packit |
1e8aac |
#define d(x)
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
typedef struct
|
|
Packit |
1e8aac |
{
|
|
Packit |
1e8aac |
GtkContainer *parent;
|
|
Packit |
1e8aac |
GtkWidget *custom_title;
|
|
Packit |
1e8aac |
gboolean include_placeholders;
|
|
Packit |
1e8aac |
gint count;
|
|
Packit |
1e8aac |
} ChildrenData;
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
static void
|
|
Packit |
1e8aac |
count_children (GtkWidget *widget, gpointer data)
|
|
Packit |
1e8aac |
{
|
|
Packit |
1e8aac |
ChildrenData *cdata = data;
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
if (widget == cdata->custom_title)
|
|
Packit |
1e8aac |
return;
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
if ((GLADE_IS_PLACEHOLDER (widget) && cdata->include_placeholders) ||
|
|
Packit |
1e8aac |
glade_widget_get_from_gobject (widget) != NULL)
|
|
Packit |
1e8aac |
cdata->count++;
|
|
Packit |
1e8aac |
}
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
static gboolean
|
|
Packit |
1e8aac |
glade_gtk_header_bar_verify_size (GObject *object,
|
|
Packit |
1e8aac |
const GValue *value)
|
|
Packit |
1e8aac |
{
|
|
Packit |
1e8aac |
gint new_size;
|
|
Packit |
1e8aac |
ChildrenData data;
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
new_size = g_value_get_int (value);
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
data.parent = GTK_CONTAINER (object);
|
|
Packit |
1e8aac |
data.custom_title = gtk_header_bar_get_custom_title (GTK_HEADER_BAR (object));
|
|
Packit |
1e8aac |
data.include_placeholders = FALSE;
|
|
Packit |
1e8aac |
data.count = 0;
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
gtk_container_forall (data.parent, count_children, &data);
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
return data.count <= new_size;
|
|
Packit |
1e8aac |
}
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
static gint
|
|
Packit |
1e8aac |
glade_gtk_header_bar_get_num_children (GObject *object)
|
|
Packit |
1e8aac |
{
|
|
Packit |
1e8aac |
ChildrenData data;
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
data.parent = GTK_CONTAINER (object);
|
|
Packit |
1e8aac |
data.custom_title = gtk_header_bar_get_custom_title (GTK_HEADER_BAR (object));
|
|
Packit |
1e8aac |
data.include_placeholders = TRUE;
|
|
Packit |
1e8aac |
data.count = 0;
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
gtk_container_forall (data.parent, count_children, &data);
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
return data.count;
|
|
Packit |
1e8aac |
}
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
static void
|
|
Packit |
1e8aac |
glade_gtk_header_bar_parse_finished (GladeProject * project,
|
|
Packit |
1e8aac |
GObject * object)
|
|
Packit |
1e8aac |
{
|
|
Packit |
1e8aac |
GladeWidget *gbox;
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
gbox = glade_widget_get_from_gobject (object);
|
|
Packit |
1e8aac |
glade_widget_property_set (gbox, "size", glade_gtk_header_bar_get_num_children (object));
|
|
Packit |
1e8aac |
glade_widget_property_set (gbox, "use-custom-title", gtk_header_bar_get_custom_title (GTK_HEADER_BAR (object)) != NULL);
|
|
Packit |
1e8aac |
}
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
void
|
|
Packit |
1e8aac |
glade_gtk_header_bar_post_create (GladeWidgetAdaptor *adaptor,
|
|
Packit |
1e8aac |
GObject *container,
|
|
Packit |
1e8aac |
GladeCreateReason reason)
|
|
Packit |
1e8aac |
{
|
|
Packit |
1e8aac |
GladeWidget *parent = glade_widget_get_from_gobject (container);
|
|
Packit |
1e8aac |
GladeProject *project = glade_widget_get_project (parent);
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
if (reason == GLADE_CREATE_LOAD)
|
|
Packit |
1e8aac |
{
|
|
Packit |
1e8aac |
g_signal_connect (project, "parse-finished",
|
|
Packit |
1e8aac |
G_CALLBACK (glade_gtk_header_bar_parse_finished),
|
|
Packit |
1e8aac |
container);
|
|
Packit |
1e8aac |
}
|
|
Packit |
1e8aac |
else if (reason == GLADE_CREATE_USER)
|
|
Packit |
1e8aac |
{
|
|
Packit |
1e8aac |
gtk_header_bar_pack_start (GTK_HEADER_BAR (container), glade_placeholder_new ());
|
|
Packit |
1e8aac |
}
|
|
Packit |
1e8aac |
}
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
void
|
|
Packit |
1e8aac |
glade_gtk_header_bar_action_activate (GladeWidgetAdaptor *adaptor,
|
|
Packit |
1e8aac |
GObject * object,
|
|
Packit |
1e8aac |
const gchar *action_path)
|
|
Packit |
1e8aac |
{
|
|
Packit |
1e8aac |
if (!strcmp (action_path, "add_slot"))
|
|
Packit |
1e8aac |
{
|
|
Packit |
1e8aac |
GladeWidget *parent;
|
|
Packit |
1e8aac |
GladeProperty *property;
|
|
Packit |
1e8aac |
gint size;
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
parent = glade_widget_get_from_gobject (object);
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
glade_command_push_group (_("Insert placeholder to %s"), glade_widget_get_name (parent));
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
property = glade_widget_get_property (parent, "size");
|
|
Packit |
1e8aac |
glade_property_get (property, &size);
|
|
Packit |
1e8aac |
glade_command_set_property (property, size + 1);
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
glade_command_pop_group ();
|
|
Packit |
1e8aac |
}
|
|
Packit |
1e8aac |
else
|
|
Packit |
1e8aac |
GWA_GET_CLASS (GTK_TYPE_CONTAINER)->action_activate (adaptor, object, action_path);
|
|
Packit |
1e8aac |
}
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
void
|
|
Packit |
1e8aac |
glade_gtk_header_bar_child_action_activate (GladeWidgetAdaptor * adaptor,
|
|
Packit |
1e8aac |
GObject * container,
|
|
Packit |
1e8aac |
GObject * object,
|
|
Packit |
1e8aac |
const gchar * action_path)
|
|
Packit |
1e8aac |
{
|
|
Packit |
1e8aac |
if (strcmp (action_path, "remove_slot") == 0)
|
|
Packit |
1e8aac |
{
|
|
Packit |
1e8aac |
GladeWidget *parent;
|
|
Packit |
1e8aac |
GladeProperty *property;
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
parent = glade_widget_get_from_gobject (container);
|
|
Packit |
1e8aac |
glade_command_push_group (_("Remove placeholder from %s"), glade_widget_get_name (parent));
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
if (g_object_get_data (object, "special-child-type"))
|
|
Packit |
1e8aac |
{
|
|
Packit |
1e8aac |
property = glade_widget_get_property (parent, "use-custom-title");
|
|
Packit |
1e8aac |
glade_command_set_property (property, FALSE);
|
|
Packit |
1e8aac |
}
|
|
Packit |
1e8aac |
else
|
|
Packit |
1e8aac |
{
|
|
Packit |
1e8aac |
gint size;
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
gtk_container_remove (GTK_CONTAINER (container), GTK_WIDGET (object));
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
property = glade_widget_get_property (parent, "size");
|
|
Packit |
1e8aac |
glade_property_get (property, &size);
|
|
Packit |
1e8aac |
glade_command_set_property (property, size - 1);
|
|
Packit |
1e8aac |
}
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
glade_command_pop_group ();
|
|
Packit |
1e8aac |
}
|
|
Packit |
1e8aac |
else
|
|
Packit |
1e8aac |
GWA_GET_CLASS (GTK_TYPE_CONTAINER)->child_action_activate (adaptor,
|
|
Packit |
1e8aac |
container,
|
|
Packit |
1e8aac |
object,
|
|
Packit |
1e8aac |
action_path);
|
|
Packit |
1e8aac |
}
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
void
|
|
Packit |
1e8aac |
glade_gtk_header_bar_get_property (GladeWidgetAdaptor * adaptor,
|
|
Packit |
1e8aac |
GObject * object,
|
|
Packit |
1e8aac |
const gchar * id,
|
|
Packit |
1e8aac |
GValue * value)
|
|
Packit |
1e8aac |
{
|
|
Packit |
1e8aac |
if (!strcmp (id, "use-custom-title"))
|
|
Packit |
1e8aac |
{
|
|
Packit |
1e8aac |
g_value_reset (value);
|
|
Packit |
1e8aac |
g_value_set_boolean (value, gtk_header_bar_get_custom_title (GTK_HEADER_BAR (object)) != NULL);
|
|
Packit |
1e8aac |
}
|
|
Packit |
1e8aac |
else if (!strcmp (id, "size"))
|
|
Packit |
1e8aac |
{
|
|
Packit |
1e8aac |
g_value_reset (value);
|
|
Packit |
1e8aac |
g_value_set_int (value, glade_gtk_header_bar_get_num_children (object));
|
|
Packit |
1e8aac |
}
|
|
Packit |
1e8aac |
else
|
|
Packit |
1e8aac |
GWA_GET_CLASS (GTK_TYPE_CONTAINER)->get_property (adaptor, object, id, value);
|
|
Packit |
1e8aac |
}
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
static void
|
|
Packit |
1e8aac |
glade_gtk_header_bar_set_size (GObject * object,
|
|
Packit |
1e8aac |
const GValue * value)
|
|
Packit |
1e8aac |
{
|
|
Packit |
1e8aac |
GList *l, *next, *children;
|
|
Packit |
1e8aac |
GtkWidget *child;
|
|
Packit |
1e8aac |
guint new_size, old_size, i;
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
g_return_if_fail (GTK_IS_HEADER_BAR (object));
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
d(g_message ("Setting size to %d", g_value_get_int (value)));
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
if (glade_util_object_is_loading (object))
|
|
Packit |
1e8aac |
return;
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
children = gtk_container_get_children (GTK_CONTAINER (object));
|
|
Packit |
1e8aac |
l = children;
|
|
Packit |
1e8aac |
while (l)
|
|
Packit |
1e8aac |
{
|
|
Packit |
1e8aac |
next = l->next;
|
|
Packit |
1e8aac |
if (l->data == gtk_header_bar_get_custom_title (GTK_HEADER_BAR (object)) ||
|
|
Packit |
1e8aac |
(!glade_widget_get_from_gobject (l->data) && !GLADE_IS_PLACEHOLDER (l->data)))
|
|
Packit |
1e8aac |
children = g_list_delete_link (children, l);
|
|
Packit |
1e8aac |
l = next;
|
|
Packit |
1e8aac |
}
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
old_size = g_list_length (children);
|
|
Packit |
1e8aac |
new_size = g_value_get_int (value);
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
if (old_size == new_size)
|
|
Packit |
1e8aac |
{
|
|
Packit |
1e8aac |
g_list_free (children);
|
|
Packit |
1e8aac |
return;
|
|
Packit |
1e8aac |
}
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
for (i = old_size; i < new_size; i++)
|
|
Packit |
1e8aac |
{
|
|
Packit |
1e8aac |
GtkWidget *placeholder = glade_placeholder_new ();
|
|
Packit |
1e8aac |
gtk_header_bar_pack_start (GTK_HEADER_BAR (object), placeholder);
|
|
Packit |
1e8aac |
}
|
|
Packit |
1e8aac |
for (l = g_list_last (children); l && old_size > new_size; l = l->prev)
|
|
Packit |
1e8aac |
{
|
|
Packit |
1e8aac |
child = l->data;
|
|
Packit |
1e8aac |
if (glade_widget_get_from_gobject (child) || !GLADE_IS_PLACEHOLDER (child))
|
|
Packit |
1e8aac |
continue;
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
gtk_container_remove (GTK_CONTAINER (object), child);
|
|
Packit |
1e8aac |
old_size--;
|
|
Packit |
1e8aac |
}
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
g_list_free (children);
|
|
Packit |
1e8aac |
}
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
void
|
|
Packit |
1e8aac |
glade_gtk_header_bar_set_use_custom_title (GObject *object,
|
|
Packit |
1e8aac |
gboolean use_custom_title)
|
|
Packit |
1e8aac |
{
|
|
Packit |
1e8aac |
GladeWidget *gwidget = glade_widget_get_from_gobject (object);
|
|
Packit |
1e8aac |
GtkWidget *child;
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
if (use_custom_title)
|
|
Packit |
1e8aac |
{
|
|
Packit |
1e8aac |
child = gtk_header_bar_get_custom_title (GTK_HEADER_BAR (object));
|
|
Packit |
1e8aac |
if (!child)
|
|
Packit |
1e8aac |
{
|
|
Packit |
1e8aac |
child = glade_placeholder_new ();
|
|
Packit |
1e8aac |
g_object_set_data (G_OBJECT (child), "special-child-type", "title");
|
|
Packit |
1e8aac |
}
|
|
Packit |
1e8aac |
}
|
|
Packit |
1e8aac |
else
|
|
Packit |
1e8aac |
child = NULL;
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
gtk_header_bar_set_custom_title (GTK_HEADER_BAR (object), child);
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
if (GLADE_IS_PLACEHOLDER (child))
|
|
Packit |
1e8aac |
{
|
|
Packit |
1e8aac |
GList *list, *l;
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
list = glade_placeholder_packing_actions (GLADE_PLACEHOLDER (child));
|
|
Packit |
1e8aac |
for (l = list; l; l = l->next)
|
|
Packit |
1e8aac |
{
|
|
Packit |
1e8aac |
GladeWidgetAction *gwa = l->data;
|
|
Packit |
1e8aac |
if (!strcmp (glade_widget_action_get_class (gwa)->id, "remove_slot"))
|
|
Packit |
1e8aac |
glade_widget_action_set_visible (gwa, FALSE);
|
|
Packit |
1e8aac |
}
|
|
Packit |
1e8aac |
}
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
if (use_custom_title)
|
|
Packit |
1e8aac |
{
|
|
Packit |
1e8aac |
glade_widget_property_set_sensitive (gwidget, "title", FALSE, TITLE_DISABLED_MESSAGE);
|
|
Packit |
1e8aac |
glade_widget_property_set_sensitive (gwidget, "subtitle", FALSE, TITLE_DISABLED_MESSAGE);
|
|
Packit |
1e8aac |
glade_widget_property_set_sensitive (gwidget, "has-subtitle", FALSE, TITLE_DISABLED_MESSAGE);
|
|
Packit |
1e8aac |
}
|
|
Packit |
1e8aac |
else
|
|
Packit |
1e8aac |
{
|
|
Packit |
1e8aac |
glade_widget_property_set_sensitive (gwidget, "title", TRUE, NULL);
|
|
Packit |
1e8aac |
glade_widget_property_set_sensitive (gwidget, "subtitle", TRUE, NULL);
|
|
Packit |
1e8aac |
glade_widget_property_set_sensitive (gwidget, "has-subtitle", TRUE, NULL);
|
|
Packit |
1e8aac |
}
|
|
Packit |
1e8aac |
}
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
void
|
|
Packit |
1e8aac |
glade_gtk_header_bar_set_property (GladeWidgetAdaptor * adaptor,
|
|
Packit |
1e8aac |
GObject * object,
|
|
Packit |
1e8aac |
const gchar * id,
|
|
Packit |
1e8aac |
const GValue * value)
|
|
Packit |
1e8aac |
{
|
|
Packit |
1e8aac |
if (!strcmp (id, "use-custom-title"))
|
|
Packit |
1e8aac |
glade_gtk_header_bar_set_use_custom_title (object, g_value_get_boolean (value));
|
|
Packit |
1e8aac |
else if (!strcmp (id, "show-close-button"))
|
|
Packit |
1e8aac |
{
|
|
Packit |
1e8aac |
GladeWidget *gwidget = glade_widget_get_from_gobject (object);
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
/* We don't set the property to 'ignore' so that we catch this in the adaptor,
|
|
Packit |
1e8aac |
* but we also do not apply the property to the runtime object here, thus
|
|
Packit |
1e8aac |
* avoiding showing the close button which would in turn close glade itself
|
|
Packit |
1e8aac |
* when clicked.
|
|
Packit |
1e8aac |
*/
|
|
Packit |
1e8aac |
glade_widget_property_set_sensitive (gwidget, "decoration-layout",
|
|
Packit |
1e8aac |
g_value_get_boolean (value),
|
|
Packit |
1e8aac |
_("The decoration layout does not apply to header bars "
|
|
Packit |
1e8aac |
"which do no show window controls"));
|
|
Packit |
1e8aac |
}
|
|
Packit |
1e8aac |
else if (!strcmp (id, "size"))
|
|
Packit |
1e8aac |
glade_gtk_header_bar_set_size (object, value);
|
|
Packit |
1e8aac |
else
|
|
Packit |
1e8aac |
GWA_GET_CLASS (GTK_TYPE_CONTAINER)->set_property (adaptor, object, id, value);
|
|
Packit |
1e8aac |
}
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
void
|
|
Packit |
1e8aac |
glade_gtk_header_bar_add_child (GladeWidgetAdaptor *adaptor,
|
|
Packit |
1e8aac |
GObject *parent,
|
|
Packit |
1e8aac |
GObject *child)
|
|
Packit |
1e8aac |
{
|
|
Packit |
1e8aac |
GladeWidget *gbox, *gchild;
|
|
Packit |
1e8aac |
gint size;
|
|
Packit |
1e8aac |
gchar *special_child_type;
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
gchild = glade_widget_get_from_gobject (child);
|
|
Packit |
1e8aac |
if (gchild)
|
|
Packit |
1e8aac |
glade_widget_set_pack_action_visible (gchild, "remove_slot", FALSE);
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
special_child_type = g_object_get_data (child, "special-child-type");
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
d(g_message ("Add %s %p (special: %s)",
|
|
Packit |
1e8aac |
GLADE_IS_PLACEHOLDER (child) ? "placeholder" : "child",
|
|
Packit |
1e8aac |
child, special_child_type));
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
if (special_child_type && !strcmp (special_child_type, "title"))
|
|
Packit |
1e8aac |
{
|
|
Packit |
1e8aac |
gtk_header_bar_set_custom_title (GTK_HEADER_BAR (parent), GTK_WIDGET (child));
|
|
Packit |
1e8aac |
return;
|
|
Packit |
1e8aac |
}
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
GWA_GET_CLASS (GTK_TYPE_CONTAINER)->add (adaptor, parent, child);
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
gbox = glade_widget_get_from_gobject (parent);
|
|
Packit |
1e8aac |
if (!glade_widget_superuser ())
|
|
Packit |
1e8aac |
{
|
|
Packit |
1e8aac |
glade_widget_property_get (gbox, "size", &size);
|
|
Packit |
1e8aac |
glade_widget_property_set (gbox, "size", size);
|
|
Packit |
1e8aac |
}
|
|
Packit |
1e8aac |
}
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
void
|
|
Packit |
1e8aac |
glade_gtk_header_bar_remove_child (GladeWidgetAdaptor * adaptor,
|
|
Packit |
1e8aac |
GObject * object,
|
|
Packit |
1e8aac |
GObject * child)
|
|
Packit |
1e8aac |
{
|
|
Packit |
1e8aac |
GladeWidget *gbox;
|
|
Packit |
1e8aac |
gint size;
|
|
Packit |
1e8aac |
gchar *special_child_type;
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
special_child_type = g_object_get_data (child, "special-child-type");
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
d(g_message ("Remove %s %p (special: %s)",
|
|
Packit |
1e8aac |
GLADE_IS_PLACEHOLDER (child) ? "placeholder" : "child",
|
|
Packit |
1e8aac |
child, special_child_type));
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
if (special_child_type && !strcmp (special_child_type, "title"))
|
|
Packit |
1e8aac |
{
|
|
Packit |
1e8aac |
GtkWidget *replacement = glade_placeholder_new ();
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
g_object_set_data (G_OBJECT (replacement), "special-child-type", "title");
|
|
Packit |
1e8aac |
gtk_header_bar_set_custom_title (GTK_HEADER_BAR (object), replacement);
|
|
Packit |
1e8aac |
return;
|
|
Packit |
1e8aac |
}
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
gtk_container_remove (GTK_CONTAINER (object), GTK_WIDGET (child));
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
/* Synchronize number of placeholders, this should trigger the set_property method with the
|
|
Packit |
1e8aac |
* correct value (not the arbitrary number of children currently in the headerbar)
|
|
Packit |
1e8aac |
*/
|
|
Packit |
1e8aac |
gbox = glade_widget_get_from_gobject (object);
|
|
Packit |
1e8aac |
if (!glade_widget_superuser ())
|
|
Packit |
1e8aac |
{
|
|
Packit |
1e8aac |
glade_widget_property_get (gbox, "size", &size);
|
|
Packit |
1e8aac |
glade_widget_property_set (gbox, "size", size);
|
|
Packit |
1e8aac |
}
|
|
Packit |
1e8aac |
}
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
void
|
|
Packit |
1e8aac |
glade_gtk_header_bar_replace_child (GladeWidgetAdaptor * adaptor,
|
|
Packit |
1e8aac |
GObject * container,
|
|
Packit |
1e8aac |
GObject * current,
|
|
Packit |
1e8aac |
GObject * new_widget)
|
|
Packit |
1e8aac |
{
|
|
Packit |
1e8aac |
GladeWidget *gbox;
|
|
Packit |
1e8aac |
gchar *special_child_type;
|
|
Packit |
1e8aac |
gint size;
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
special_child_type =
|
|
Packit |
1e8aac |
g_object_get_data (G_OBJECT (current), "special-child-type");
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
d(g_message ("Replace %s %p (special: %s) with %s %p",
|
|
Packit |
1e8aac |
GLADE_IS_PLACEHOLDER (current) ? "placeholder" : "child",
|
|
Packit |
1e8aac |
current, special_child_type,
|
|
Packit |
1e8aac |
GLADE_IS_PLACEHOLDER (new_widget) ? "placeholder" : "child",
|
|
Packit |
1e8aac |
new_widget));
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
if (special_child_type && !strcmp (special_child_type, "title"))
|
|
Packit |
1e8aac |
{
|
|
Packit |
1e8aac |
g_object_set_data (G_OBJECT (new_widget), "special-child-type", "title");
|
|
Packit |
1e8aac |
gtk_header_bar_set_custom_title (GTK_HEADER_BAR (container), GTK_WIDGET (new_widget));
|
|
Packit |
1e8aac |
return;
|
|
Packit |
1e8aac |
}
|
|
Packit |
1e8aac |
else
|
|
Packit |
1e8aac |
g_object_set_data (G_OBJECT (new_widget), "special-child-type", NULL);
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
GWA_GET_CLASS
|
|
Packit |
1e8aac |
(GTK_TYPE_CONTAINER)->replace_child (adaptor, container, current, new_widget);
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
gbox = glade_widget_get_from_gobject (container);
|
|
Packit |
1e8aac |
if (!glade_widget_superuser ())
|
|
Packit |
1e8aac |
{
|
|
Packit |
1e8aac |
glade_widget_property_get (gbox, "size", &size);
|
|
Packit |
1e8aac |
glade_widget_property_set (gbox, "size", size);
|
|
Packit |
1e8aac |
}
|
|
Packit |
1e8aac |
}
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
gboolean
|
|
Packit |
1e8aac |
glade_gtk_header_bar_verify_property (GladeWidgetAdaptor *adaptor,
|
|
Packit |
1e8aac |
GObject *object,
|
|
Packit |
1e8aac |
const gchar *id,
|
|
Packit |
1e8aac |
const GValue *value)
|
|
Packit |
1e8aac |
{
|
|
Packit |
1e8aac |
if (!strcmp (id, "size"))
|
|
Packit |
1e8aac |
return glade_gtk_header_bar_verify_size (object, value);
|
|
Packit |
1e8aac |
else if (GWA_GET_CLASS (GTK_TYPE_CONTAINER)->verify_property)
|
|
Packit |
1e8aac |
return GWA_GET_CLASS (GTK_TYPE_CONTAINER)->verify_property (adaptor, object, id, value);
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
return TRUE;
|
|
Packit |
1e8aac |
}
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
void
|
|
Packit |
1e8aac |
glade_gtk_header_bar_child_set_property (GladeWidgetAdaptor *adaptor,
|
|
Packit |
1e8aac |
GObject *container,
|
|
Packit |
1e8aac |
GObject *child,
|
|
Packit |
1e8aac |
const gchar *property_name,
|
|
Packit |
1e8aac |
const GValue *value)
|
|
Packit |
1e8aac |
{
|
|
Packit |
1e8aac |
GladeWidget *gbox;
|
|
Packit |
1e8aac |
gint size;
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
d(g_message ("Set child prop %s %s\n", g_type_name_from_instance (child), property_name));
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
gtk_container_child_set_property (GTK_CONTAINER (container),
|
|
Packit |
1e8aac |
GTK_WIDGET (child),
|
|
Packit |
1e8aac |
property_name,
|
|
Packit |
1e8aac |
value);
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
gbox = glade_widget_get_from_gobject (container);
|
|
Packit |
1e8aac |
if (!glade_widget_superuser ())
|
|
Packit |
1e8aac |
{
|
|
Packit |
1e8aac |
glade_widget_property_get (gbox, "size", &size);
|
|
Packit |
1e8aac |
glade_widget_property_set (gbox, "size", size);
|
|
Packit |
1e8aac |
}
|
|
Packit |
1e8aac |
}
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
GladeEditable *
|
|
Packit |
1e8aac |
glade_gtk_header_bar_create_editable (GladeWidgetAdaptor * adaptor,
|
|
Packit |
1e8aac |
GladeEditorPageType type)
|
|
Packit |
1e8aac |
{
|
|
Packit |
1e8aac |
if (type == GLADE_PAGE_GENERAL)
|
|
Packit |
1e8aac |
return (GladeEditable *) glade_header_bar_editor_new ();
|
|
Packit |
1e8aac |
else
|
|
Packit |
1e8aac |
return GWA_GET_CLASS (GTK_TYPE_CONTAINER)->create_editable (adaptor, type);
|
|
Packit |
1e8aac |
}
|