[Xfce4-commits] r23617 - in thunar/trunk: . thunar
Benedikt Meurer
benny at xfce.org
Fri Nov 3 20:35:43 CET 2006
Author: benny
Date: 2006-11-03 19:35:40 +0000 (Fri, 03 Nov 2006)
New Revision: 23617
Added:
thunar/trunk/thunar/xfce-heading.c
thunar/trunk/thunar/xfce-heading.h
thunar/trunk/thunar/xfce-titled-dialog.c
thunar/trunk/thunar/xfce-titled-dialog.h
Modified:
thunar/trunk/ChangeLog
thunar/trunk/thunar/Makefile.am
thunar/trunk/thunar/thunar-preferences-dialog.c
Log:
2006-11-03 Benedikt Meurer <benny at xfce.org>
* thunar/xfce-heading.{c,h}, thunar/xfce-titled-dialog.{c,h},
thunar/Makefile.am, thunar/thunar-preferences-dialog.c: Adjust the
preferences dialog to match the look of the other Xfce preferences
dialogs. Bug #2379.
Modified: thunar/trunk/ChangeLog
===================================================================
--- thunar/trunk/ChangeLog 2006-11-03 19:30:56 UTC (rev 23616)
+++ thunar/trunk/ChangeLog 2006-11-03 19:35:40 UTC (rev 23617)
@@ -1,5 +1,12 @@
2006-11-03 Benedikt Meurer <benny at xfce.org>
+ * thunar/xfce-heading.{c,h}, thunar/xfce-titled-dialog.{c,h},
+ thunar/Makefile.am, thunar/thunar-preferences-dialog.c: Adjust the
+ preferences dialog to match the look of the other Xfce preferences
+ dialogs. Bug #2379.
+
+2006-11-03 Benedikt Meurer <benny at xfce.org>
+
* thunar/thunar-window.c(thunar_window_set_current_directory): Place
focus on the main view after changing the currently displayed
folder. Bug #2367.
Modified: thunar/trunk/thunar/Makefile.am
===================================================================
--- thunar/trunk/thunar/Makefile.am 2006-11-03 19:30:56 UTC (rev 23616)
+++ thunar/trunk/thunar/Makefile.am 2006-11-03 19:35:40 UTC (rev 23617)
@@ -182,7 +182,11 @@
thunar-view.h \
thunar-window.c \
thunar-window.h \
- thunar-window-ui.h
+ thunar-window-ui.h \
+ xfce-heading.c \
+ xfce-heading.h \
+ xfce-titled-dialog.c \
+ xfce-titled-dialog.h
Thunar_CFLAGS = \
$(EXO_CFLAGS) \
Modified: thunar/trunk/thunar/thunar-preferences-dialog.c
===================================================================
--- thunar/trunk/thunar/thunar-preferences-dialog.c 2006-11-03 19:30:56 UTC (rev 23616)
+++ thunar/trunk/thunar/thunar-preferences-dialog.c 2006-11-03 19:35:40 UTC (rev 23617)
@@ -23,7 +23,6 @@
#include <gdk/gdkkeysyms.h>
-#include <thunar/thunar-abstract-dialog.h>
#include <thunar/thunar-compact-view.h>
#include <thunar/thunar-details-view.h>
#include <thunar/thunar-enum-types.h>
@@ -32,6 +31,7 @@
#include <thunar/thunar-pango-extensions.h>
#include <thunar/thunar-preferences-dialog.h>
#include <thunar/thunar-preferences.h>
+#include <thunar/xfce-titled-dialog.h>
@@ -45,13 +45,13 @@
struct _ThunarPreferencesDialogClass
{
- ThunarAbstractDialogClass __parent__;
+ XfceTitledDialogClass __parent__;
};
struct _ThunarPreferencesDialog
{
- ThunarAbstractDialog __parent__;
- ThunarPreferences *preferences;
+ XfceTitledDialog __parent__;
+ ThunarPreferences *preferences;
};
@@ -81,7 +81,7 @@
NULL,
};
- type = g_type_register_static (THUNAR_TYPE_ABSTRACT_DIALOG, I_("ThunarPreferencesDialog"), &info, 0);
+ type = g_type_register_static (XFCE_TYPE_TITLED_DIALOG, I_("ThunarPreferencesDialog"), &info, 0);
}
return type;
@@ -215,6 +215,7 @@
/* configure the dialog properties */
gtk_dialog_set_has_separator (GTK_DIALOG (dialog), FALSE);
gtk_window_set_destroy_with_parent (GTK_WINDOW (dialog), TRUE);
+ gtk_window_set_icon_name (GTK_WINDOW (dialog), "xfce-filemanager");
gtk_window_set_resizable (GTK_WINDOW (dialog), FALSE);
gtk_window_set_title (GTK_WINDOW (dialog), _("File Manager Preferences"));
Copied: thunar/trunk/thunar/xfce-heading.c (from rev 23615, libexo/trunk/exo-support/xfce-heading.c)
===================================================================
--- thunar/trunk/thunar/xfce-heading.c (rev 0)
+++ thunar/trunk/thunar/xfce-heading.c 2006-11-03 19:35:40 UTC (rev 23617)
@@ -0,0 +1,755 @@
+/* $Id$ */
+/*-
+ * Copyright (c) 2006 Benedikt Meurer <benny at xfce.org>.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library 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
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library 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.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#ifdef HAVE_MEMORY_H
+#include <memory.h>
+#endif
+#ifdef HAVE_STRING_H
+#include <string.h>
+#endif
+
+#include "xfce-heading.h"
+
+
+
+#define XFCE_HEADING_BORDER 6
+#define XFCE_HEADING_SPACING 12
+#define XFCE_HEADING_ICON_SIZE 48
+
+#define XFCE_HEADING_GET_PRIVATE(obj) (G_TYPE_INSTANCE_GET_PRIVATE ((obj), XFCE_TYPE_HEADING, XfceHeadingPrivate))
+
+
+
+/* Property identifiers */
+enum
+{
+ PROP_0,
+ PROP_ICON,
+ PROP_ICON_NAME,
+ PROP_SUBTITLE,
+ PROP_TITLE,
+};
+
+
+
+static void xfce_heading_class_init (XfceHeadingClass *klass);
+static void xfce_heading_init (XfceHeading *heading);
+static void xfce_heading_finalize (GObject *object);
+static void xfce_heading_get_property (GObject *object,
+ guint prop_id,
+ GValue *value,
+ GParamSpec *pspec);
+static void xfce_heading_set_property (GObject *object,
+ guint prop_id,
+ const GValue *value,
+ GParamSpec *pspec);
+static void xfce_heading_realize (GtkWidget *widget);
+static void xfce_heading_size_request (GtkWidget *widget,
+ GtkRequisition *requisition);
+static void xfce_heading_style_set (GtkWidget *widget,
+ GtkStyle *previous_style);
+static gboolean xfce_heading_expose_event (GtkWidget *widget,
+ GdkEventExpose *event);
+static AtkObject *xfce_heading_get_accessible (GtkWidget *widget);
+static PangoLayout *xfce_heading_make_layout (XfceHeading *heading);
+static GdkPixbuf *xfce_heading_make_pixbuf (XfceHeading *heading);
+
+
+
+struct _XfceHeadingPrivate
+{
+ GdkPixbuf *icon;
+ gchar *icon_name;
+ gchar *subtitle;
+ gchar *title;
+};
+
+
+
+G_DEFINE_TYPE (XfceHeading, xfce_heading, GTK_TYPE_WIDGET);
+
+
+
+static void
+xfce_heading_class_init (XfceHeadingClass *klass)
+{
+ GtkWidgetClass *gtkwidget_class;
+ GObjectClass *gobject_class;
+
+ /* add our private data to the class */
+ g_type_class_add_private (klass, sizeof (XfceHeadingPrivate));
+
+ gobject_class = G_OBJECT_CLASS (klass);
+ gobject_class->finalize = xfce_heading_finalize;
+ gobject_class->get_property = xfce_heading_get_property;
+ gobject_class->set_property = xfce_heading_set_property;
+
+ gtkwidget_class = GTK_WIDGET_CLASS (klass);
+ gtkwidget_class->realize = xfce_heading_realize;
+ gtkwidget_class->size_request = xfce_heading_size_request;
+ gtkwidget_class->style_set = xfce_heading_style_set;
+ gtkwidget_class->expose_event = xfce_heading_expose_event;
+ gtkwidget_class->get_accessible = xfce_heading_get_accessible;
+
+ /**
+ * XfceHeading:icon:
+ *
+ * The #GdkPixbuf to display as icon, or %NULL to use the
+ * "icon-name" property.
+ *
+ * Since: 4.4.0
+ **/
+ g_object_class_install_property (gobject_class,
+ PROP_ICON,
+ g_param_spec_object ("icon",
+ "icon",
+ "icon",
+ GDK_TYPE_PIXBUF,
+ G_PARAM_READWRITE));
+
+ /**
+ * XfceHeading:icon-name:
+ *
+ * If the "icon" property value is %NULL this is the name of
+ * the icon to display instead (looked up using the icon theme).
+ * If this property is also %NULL or the specified icon does not
+ * exist in the selected icon theme, no icon will be displayed.
+ *
+ * Since: 4.4.0
+ **/
+ g_object_class_install_property (gobject_class,
+ PROP_ICON_NAME,
+ g_param_spec_string ("icon-name",
+ "icon-name",
+ "icon-name",
+ NULL,
+ G_PARAM_READWRITE));
+
+ /**
+ * XfceHeading:subtitle:
+ *
+ * The sub title that should be displayed below the
+ * title. May be %NULL or the empty string to display
+ * only the title.
+ *
+ * Since: 4.4.0
+ **/
+ g_object_class_install_property (gobject_class,
+ PROP_SUBTITLE,
+ g_param_spec_string ("subtitle",
+ "subtitle",
+ "subtitle",
+ NULL,
+ G_PARAM_READWRITE));
+
+ /**
+ * XfceHeading:title:
+ *
+ * The title text to display in the heading.
+ *
+ * Since: 4.4.0
+ **/
+ g_object_class_install_property (gobject_class,
+ PROP_TITLE,
+ g_param_spec_string ("title",
+ "title",
+ "title",
+ NULL,
+ G_PARAM_READWRITE));
+}
+
+
+
+static void
+xfce_heading_init (XfceHeading *heading)
+{
+ /* setup the private data */
+ heading->priv = XFCE_HEADING_GET_PRIVATE (heading);
+
+ /* setup the widget parameters */
+ GTK_WIDGET_UNSET_FLAGS (heading, GTK_NO_WINDOW);
+}
+
+
+
+static void
+xfce_heading_finalize (GObject *object)
+{
+ XfceHeading *heading = XFCE_HEADING (object);
+
+ /* release the private data */
+ if (G_UNLIKELY (heading->priv->icon != NULL))
+ g_object_unref (G_OBJECT (heading->priv->icon));
+ g_free (heading->priv->icon_name);
+ g_free (heading->priv->subtitle);
+ g_free (heading->priv->title);
+
+ (*G_OBJECT_CLASS (xfce_heading_parent_class)->finalize) (object);
+}
+
+
+
+static void
+xfce_heading_get_property (GObject *object,
+ guint prop_id,
+ GValue *value,
+ GParamSpec *pspec)
+{
+ XfceHeading *heading = XFCE_HEADING (object);
+
+ switch (prop_id)
+ {
+ case PROP_ICON:
+ g_value_set_object (value, xfce_heading_get_icon (heading));
+ break;
+
+ case PROP_ICON_NAME:
+ g_value_set_string (value, xfce_heading_get_icon_name (heading));
+ break;
+
+ case PROP_SUBTITLE:
+ g_value_set_string (value, xfce_heading_get_subtitle (heading));
+ break;
+
+ case PROP_TITLE:
+ g_value_set_string (value, xfce_heading_get_title (heading));
+ break;
+
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ break;
+ }
+}
+
+
+
+static void
+xfce_heading_set_property (GObject *object,
+ guint prop_id,
+ const GValue *value,
+ GParamSpec *pspec)
+{
+ XfceHeading *heading = XFCE_HEADING (object);
+
+ switch (prop_id)
+ {
+ case PROP_ICON:
+ xfce_heading_set_icon (heading, g_value_get_object (value));
+ break;
+
+ case PROP_ICON_NAME:
+ xfce_heading_set_icon_name (heading, g_value_get_string (value));
+ break;
+
+ case PROP_SUBTITLE:
+ xfce_heading_set_subtitle (heading, g_value_get_string (value));
+ break;
+
+ case PROP_TITLE:
+ xfce_heading_set_title (heading, g_value_get_string (value));
+ break;
+
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ break;
+ }
+}
+
+
+
+static void
+xfce_heading_realize (GtkWidget *widget)
+{
+ GdkWindowAttr attributes;
+
+ /* mark the widget as realized */
+ GTK_WIDGET_SET_FLAGS (widget, GTK_REALIZED);
+
+ /* setup the window attributes */
+ attributes.x = widget->allocation.x;
+ attributes.y = widget->allocation.y;
+ attributes.width = widget->allocation.width;
+ attributes.height = widget->allocation.height;
+ attributes.wclass = GDK_INPUT_OUTPUT;
+ attributes.window_type = GDK_WINDOW_CHILD;
+ attributes.visual = gtk_widget_get_visual (widget);
+ attributes.colormap = gtk_widget_get_colormap (widget);
+ attributes.event_mask = gtk_widget_get_events (widget)
+ | GDK_EXPOSURE_MASK;
+
+ /* allocate the widget window */
+ widget->window = gdk_window_new (gtk_widget_get_parent_window (widget), &attributes,
+ GDK_WA_X | GDK_WA_Y | GDK_WA_VISUAL | GDK_WA_COLORMAP);
+ gdk_window_set_user_data (widget->window, widget);
+
+ /* connect the style to the window */
+ widget->style = gtk_style_attach (widget->style, widget->window);
+
+ /* set background color (using the base color) */
+ gdk_window_set_background (widget->window, &widget->style->base[GTK_STATE_NORMAL]);
+}
+
+
+
+static void
+xfce_heading_size_request (GtkWidget *widget,
+ GtkRequisition *requisition)
+{
+ XfceHeading *heading = XFCE_HEADING (widget);
+ PangoLayout *layout;
+ GdkPixbuf *pixbuf;
+ gint layout_width;
+ gint layout_height;
+ gint pixbuf_width = 0;
+ gint pixbuf_height = 0;
+
+ /* determine the dimensions of the title text */
+ layout = xfce_heading_make_layout (heading);
+ pango_layout_get_pixel_size (layout, &layout_width, &layout_height);
+ g_object_unref (G_OBJECT (layout));
+
+ /* determine the dimensions of the pixbuf */
+ pixbuf = xfce_heading_make_pixbuf (heading);
+ if (G_LIKELY (pixbuf != NULL))
+ {
+ pixbuf_width = gdk_pixbuf_get_width (pixbuf);
+ pixbuf_height = gdk_pixbuf_get_height (pixbuf);
+ g_object_unref (G_OBJECT (pixbuf));
+ }
+
+ /* determine the base dimensions */
+ requisition->width = layout_width + pixbuf_width + ((pixbuf_width > 0) ? XFCE_HEADING_SPACING : 0);
+ requisition->height = MAX (XFCE_HEADING_ICON_SIZE, MAX (pixbuf_height, layout_height));
+
+ /* add border size */
+ requisition->width += 2 * XFCE_HEADING_BORDER;
+ requisition->height += 2 * XFCE_HEADING_BORDER;
+}
+
+
+
+static void
+xfce_heading_style_set (GtkWidget *widget,
+ GtkStyle *previous_style)
+{
+ /* check if we're already realized */
+ if (GTK_WIDGET_REALIZED (widget))
+ {
+ /* set background color (using the base color) */
+ gdk_window_set_background (widget->window, &widget->style->base[GTK_STATE_NORMAL]);
+ }
+}
+
+
+
+static gboolean
+xfce_heading_expose_event (GtkWidget *widget,
+ GdkEventExpose *event)
+{
+ XfceHeading *heading = XFCE_HEADING (widget);
+ PangoLayout *layout;
+ GdkPixbuf *pixbuf;
+ gboolean rtl;
+ gint width;
+ gint height;
+ gint x;
+ gint y;
+
+ /* check if we should render from right to left */
+ rtl = (gtk_widget_get_direction (widget) == GTK_TEXT_DIR_RTL);
+
+ /* determine the initial horizontal position */
+ x = (rtl ? widget->allocation.width - XFCE_HEADING_BORDER : XFCE_HEADING_BORDER);
+
+ /* check if we have a pixbuf to render */
+ pixbuf = xfce_heading_make_pixbuf (heading);
+ if (G_LIKELY (pixbuf != NULL))
+ {
+ /* determine the pixbuf dimensions */
+ width = gdk_pixbuf_get_width (pixbuf);
+ height = gdk_pixbuf_get_height (pixbuf);
+
+ /* determine the vertical position */
+ y = (widget->allocation.height - height) / 2;
+
+ /* render the pixbuf */
+ gdk_draw_pixbuf (widget->window, widget->style->black_gc, pixbuf, 0, 0,
+ (rtl ? x - width : x), y, width, height,
+ GDK_RGB_DITHER_NORMAL, 0, 0);
+
+ /* release the pixbuf */
+ g_object_unref (G_OBJECT (pixbuf));
+
+ /* advance the horizontal position */
+ x += (rtl ? -1 : 1) * (width + XFCE_HEADING_SPACING);
+ }
+
+ /* generate the title layout */
+ layout = xfce_heading_make_layout (heading);
+ pango_layout_get_pixel_size (layout, &width, &height);
+
+ /* determine the vertical position */
+ y = (widget->allocation.height - height) / 2;
+
+ /* render the title */
+ gtk_paint_layout (widget->style, widget->window, GTK_WIDGET_STATE (widget), TRUE, &event->area,
+ widget, "heading", (rtl ? x - width : x), y, layout);
+
+ /* release the layout */
+ g_object_unref (G_OBJECT (layout));
+
+ return FALSE;
+}
+
+
+
+static AtkObject*
+xfce_heading_get_accessible (GtkWidget *widget)
+{
+ AtkObject *object;
+
+ object = (*GTK_WIDGET_CLASS (xfce_heading_parent_class)->get_accessible) (widget);
+ atk_object_set_role (object, ATK_ROLE_HEADER);
+
+ return object;
+}
+
+
+
+static PangoLayout*
+xfce_heading_make_layout (XfceHeading *heading)
+{
+ PangoAttribute *attribute;
+ PangoAttrList *attr_list;
+ PangoLayout *layout;
+ GString *text;
+ gint title_length = 0;
+
+ /* generate the full text */
+ text = g_string_sized_new (128);
+ if (G_LIKELY (heading->priv->title != NULL))
+ {
+ /* add the main title */
+ title_length = strlen (heading->priv->title);
+ g_string_append (text, heading->priv->title);
+ }
+ if (heading->priv->subtitle != NULL && *heading->priv->subtitle != '\0')
+ {
+ /* add an empty line between the title and the subtitle */
+ if (G_LIKELY (heading->priv->title != NULL))
+ g_string_append (text, "\n");
+
+ /* add the subtitle */
+ g_string_append (text, heading->priv->subtitle);
+ }
+
+ /* allocate and setup a new layout from the widget's context */
+ layout = gtk_widget_create_pango_layout (GTK_WIDGET (heading), text->str);
+
+ /* allocate an attribute list (large bold title) */
+ attr_list = pango_attr_list_new ();
+ attribute = pango_attr_scale_new (PANGO_SCALE_LARGE); /* large title */
+ attribute->start_index = 0;
+ attribute->end_index = title_length;
+ pango_attr_list_insert (attr_list, attribute);
+ attribute = pango_attr_weight_new (PANGO_WEIGHT_BOLD); /* bold title */
+ attribute->start_index = 0;
+ attribute->end_index = title_length;
+ pango_attr_list_insert (attr_list, attribute);
+ pango_layout_set_attributes (layout, attr_list);
+ pango_attr_list_unref (attr_list);
+
+ /* cleanup */
+ g_string_free (text, TRUE);
+
+ return layout;
+}
+
+
+
+static GdkPixbuf*
+xfce_heading_make_pixbuf (XfceHeading *heading)
+{
+ GtkIconTheme *icon_theme;
+ GdkPixbuf *pixbuf = NULL;
+ GdkScreen *screen;
+
+ if (G_UNLIKELY (heading->priv->icon != NULL))
+ {
+ /* just use the specified icon */
+ pixbuf = g_object_ref (G_OBJECT (heading->priv->icon));
+ }
+ else if (G_LIKELY (heading->priv->icon_name != NULL))
+ {
+ /* determine the icon theme for the current screen */
+ screen = gtk_widget_get_screen (GTK_WIDGET (heading));
+ icon_theme = gtk_icon_theme_get_for_screen (screen);
+
+ /* try to load the icon from the icon theme */
+ pixbuf = gtk_icon_theme_load_icon (icon_theme, heading->priv->icon_name,
+ XFCE_HEADING_ICON_SIZE,
+ GTK_ICON_LOOKUP_USE_BUILTIN, NULL);
+ }
+
+ return pixbuf;
+}
+
+
+
+/**
+ * xfce_heading_new:
+ *
+ * Allocates a new #XfceHeading instance.
+ *
+ * Return value: the newly allocated #XfceHeading.
+ *
+ * Since: 4.4.0
+ **/
+GtkWidget*
+xfce_heading_new (void)
+{
+ return g_object_new (XFCE_TYPE_HEADING, NULL);
+}
+
+
+
+/**
+ * xfce_heading_get_icon:
+ * @heading : a #XfceHeading.
+ *
+ * Returns the #GdkPixbuf that was set as icon for
+ * @heading or %NULL if no icon is set. The returned
+ * #GdkPixbuf object is owned by @heading.
+ *
+ * Return value: the icon for @heading, or %NULL.
+ *
+ * Since: 4.4.0
+ **/
+GdkPixbuf*
+xfce_heading_get_icon (XfceHeading *heading)
+{
+ g_return_val_if_fail (XFCE_IS_HEADING (heading), NULL);
+ return heading->priv->icon;
+}
+
+
+
+/**
+ * xfce_heading_set_icon:
+ * @heading : a #XfceHeading.
+ * @icon : the new icon or %NULL.
+ *
+ * If @icon is not %NULL, @heading will display the new @icon
+ * aside the title. Else, if @icon is %NULL no icon is displayed
+ * unless an icon name was set with xfce_heading_set_icon_name().
+ *
+ * Since: 4.4.0
+ **/
+void
+xfce_heading_set_icon (XfceHeading *heading,
+ GdkPixbuf *icon)
+{
+ g_return_if_fail (XFCE_IS_HEADING (heading));
+ g_return_if_fail (icon == NULL || GDK_IS_PIXBUF (icon));
+
+ /* check if we have a new icon */
+ if (G_LIKELY (heading->priv->icon != icon))
+ {
+ /* disconnect from the previous icon */
+ if (G_LIKELY (heading->priv->icon != NULL))
+ g_object_unref (G_OBJECT (heading->priv->icon));
+
+ /* activate the new icon */
+ heading->priv->icon = icon;
+
+ /* connect to the new icon */
+ if (G_LIKELY (icon != NULL))
+ g_object_ref (G_OBJECT (icon));
+
+ /* schedule a resize */
+ gtk_widget_queue_resize (GTK_WIDGET (heading));
+
+ /* notify listeners */
+ g_object_notify (G_OBJECT (heading), "icon");
+ }
+}
+
+
+
+/**
+ * xfce_heading_get_icon_name:
+ * @heading : a #XfceHeading.
+ *
+ * Returns the icon name previously set by a call to
+ * xfce_heading_set_icon_name() or %NULL if no icon name
+ * is set for @heading.
+ *
+ * Return value: the icon name for @heading, or %NULL.
+ *
+ * Since: 4.4.0
+ **/
+G_CONST_RETURN gchar*
+xfce_heading_get_icon_name (XfceHeading *heading)
+{
+ g_return_val_if_fail (XFCE_IS_HEADING (heading), NULL);
+ return heading->priv->icon_name;
+}
+
+
+
+/**
+ * xfce_heading_set_icon_name:
+ * @heading : a #XfceHeading.
+ * @icon_name : the new icon name, or %NULL.
+ *
+ * If @icon_name is not %NULL and the "icon" property is set to
+ * %NULL, see xfce_heading_set_icon(), the @heading will display
+ * the name icon identified by the @icon_name.
+ *
+ * Since: 4.4.0
+ **/
+void
+xfce_heading_set_icon_name (XfceHeading *heading,
+ const gchar *icon_name)
+{
+ g_return_if_fail (XFCE_IS_HEADING (heading));
+
+ /* release the previous icon name */
+ g_free (heading->priv->icon_name);
+
+ /* activate the new icon name */
+ heading->priv->icon_name = g_strdup (icon_name);
+
+ /* schedule a resize */
+ gtk_widget_queue_resize (GTK_WIDGET (heading));
+
+ /* notify listeners */
+ g_object_notify (G_OBJECT (heading), "icon-name");
+}
+
+
+
+/**
+ * xfce_heading_get_subtitle:
+ * @heading : a #XfceHeading.
+ *
+ * Returns the sub title displayed below the
+ * main title of the @heading, or %NULL if
+ * no subtitle is set.
+ *
+ * Return value: the subtitle of @heading, or %NULL.
+ *
+ * Since: 4.4.0
+ **/
+G_CONST_RETURN gchar*
+xfce_heading_get_subtitle (XfceHeading *heading)
+{
+ g_return_val_if_fail (XFCE_IS_HEADING (heading), NULL);
+ return heading->priv->subtitle;
+}
+
+
+
+/**
+ * xfce_heading_set_subtitle:
+ * @heading : a #XfceHeading.
+ * @subtitle : the new subtitle for @heading, or %NULL.
+ *
+ * If @subtitle is not %NULL and not the empty string, it
+ * will be displayed by @heading below the main title.
+ *
+ * Since: 4.4.0
+ **/
+void
+xfce_heading_set_subtitle (XfceHeading *heading,
+ const gchar *subtitle)
+{
+ g_return_if_fail (XFCE_IS_HEADING (heading));
+ g_return_if_fail (subtitle == NULL || g_utf8_validate (subtitle, -1, NULL));
+
+ /* release the previous subtitle */
+ g_free (heading->priv->subtitle);
+
+ /* activate the new subtitle */
+ heading->priv->subtitle = g_strdup (subtitle);
+
+ /* schedule a resize */
+ gtk_widget_queue_resize (GTK_WIDGET (heading));
+
+ /* notify listeners */
+ g_object_notify (G_OBJECT (heading), "subtitle");
+}
+
+
+
+/**
+ * xfce_heading_get_title:
+ * @heading : a #XfceHeading.
+ *
+ * Returns the title displayed by the @heading.
+ *
+ * Return value: the title displayed by the @heading.
+ *
+ * Since: 4.4.0
+ **/
+G_CONST_RETURN gchar*
+xfce_heading_get_title (XfceHeading *heading)
+{
+ g_return_val_if_fail (XFCE_IS_HEADING (heading), NULL);
+ return heading->priv->title;
+}
+
+
+
+/**
+ * xfce_heading_set_title:
+ * @heading : a #XfceHeading.
+ * @title : the new title for the @heading.
+ *
+ * Sets the title displayed by the @heading to the
+ * specified @title.
+ *
+ * Since: 4.4.0
+ **/
+void
+xfce_heading_set_title (XfceHeading *heading,
+ const gchar *title)
+{
+ g_return_if_fail (XFCE_IS_HEADING (heading));
+ g_return_if_fail (title == NULL || g_utf8_validate (title, -1, NULL));
+
+ /* release the previous title */
+ g_free (heading->priv->title);
+
+ /* activate the new title */
+ heading->priv->title = g_strdup (title);
+
+ /* schedule a resize */
+ gtk_widget_queue_resize (GTK_WIDGET (heading));
+
+ /* notify listeners */
+ g_object_notify (G_OBJECT (heading), "title");
+}
+
+
Copied: thunar/trunk/thunar/xfce-heading.h (from rev 23615, libexo/trunk/exo-support/xfce-heading.h)
===================================================================
--- thunar/trunk/thunar/xfce-heading.h (rev 0)
+++ thunar/trunk/thunar/xfce-heading.h 2006-11-03 19:35:40 UTC (rev 23617)
@@ -0,0 +1,82 @@
+/* $Id$ */
+/*-
+ * Copyright (c) 2006 Benedikt Meurer <benny at xfce.org>.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library 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
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library 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.
+ */
+
+#ifndef __XFCE_HEADING_H__
+#define __XFCE_HEADING_H__
+
+#include <gtk/gtk.h>
+
+G_BEGIN_DECLS;
+
+typedef struct _XfceHeadingPrivate XfceHeadingPrivate;
+typedef struct _XfceHeadingClass XfceHeadingClass;
+typedef struct _XfceHeading XfceHeading;
+
+#define XFCE_TYPE_HEADING (xfce_heading_get_type ())
+#define XFCE_HEADING(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), XFCE_TYPE_HEADING, XfceHeading))
+#define XFCE_HEADING_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), XFCE_TYPE_HEADING, XfceHeadingClass))
+#define XFCE_IS_HEADING(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), XFCE_TYPE_HEADING))
+#define XFCE_IS_HEADING_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), XFCE_TYPE_HEADING))
+#define XFCE_HEADING_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), XFCE_TYPE_HEADING, XfceHeadingClass))
+
+struct _XfceHeadingClass
+{
+ /*< private >*/
+ GtkWidgetClass __parent__;
+
+ /* reserved for future expansion */
+ void (*reserved0) (void);
+ void (*reserved1) (void);
+ void (*reserved2) (void);
+ void (*reserved3) (void);
+ void (*reserved4) (void);
+ void (*reserved5) (void);
+};
+
+struct _XfceHeading
+{
+ /*< private >*/
+ GtkWidget __parent__;
+ XfceHeadingPrivate *priv;
+};
+
+GType xfce_heading_get_type (void) G_GNUC_CONST;
+
+GtkWidget *xfce_heading_new (void) G_GNUC_MALLOC;
+
+GdkPixbuf *xfce_heading_get_icon (XfceHeading *heading);
+void xfce_heading_set_icon (XfceHeading *heading,
+ GdkPixbuf *icon);
+
+G_CONST_RETURN gchar *xfce_heading_get_icon_name (XfceHeading *heading);
+void xfce_heading_set_icon_name (XfceHeading *heading,
+ const gchar *icon_name);
+
+G_CONST_RETURN gchar *xfce_heading_get_subtitle (XfceHeading *heading);
+void xfce_heading_set_subtitle (XfceHeading *heading,
+ const gchar *subtitle);
+
+G_CONST_RETURN gchar *xfce_heading_get_title (XfceHeading *heading);
+void xfce_heading_set_title (XfceHeading *heading,
+ const gchar *title);
+
+G_END_DECLS;
+
+#endif /* !__XFCE_HEADING_H__ */
Copied: thunar/trunk/thunar/xfce-titled-dialog.c (from rev 23615, libexo/trunk/exo-support/xfce-titled-dialog.c)
===================================================================
--- thunar/trunk/thunar/xfce-titled-dialog.c (rev 0)
+++ thunar/trunk/thunar/xfce-titled-dialog.c 2006-11-03 19:35:40 UTC (rev 23617)
@@ -0,0 +1,370 @@
+/* $Id$ */
+/*-
+ * Copyright (c) 2006 Benedikt Meurer <benny at xfce.org>.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library 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
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library 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.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#ifdef HAVE_STDARG_H
+#include <stdarg.h>
+#endif
+
+#include <gdk/gdkkeysyms.h>
+
+#include "xfce-heading.h"
+#include "xfce-titled-dialog.h"
+
+
+
+#define XFCE_TITLED_DIALOG_GET_PRIVATE(obj) (G_TYPE_INSTANCE_GET_PRIVATE ((obj), XFCE_TYPE_TITLED_DIALOG, XfceTitledDialogPrivate))
+
+
+
+/* Property identifiers */
+enum
+{
+ PROP_0,
+ PROP_SUBTITLE,
+};
+
+
+
+static void xfce_titled_dialog_class_init (XfceTitledDialogClass *klass);
+static void xfce_titled_dialog_init (XfceTitledDialog *titled_dialog);
+static void xfce_titled_dialog_finalize (GObject *object);
+static void xfce_titled_dialog_get_property (GObject *object,
+ guint prop_id,
+ GValue *value,
+ GParamSpec *pspec);
+static void xfce_titled_dialog_set_property (GObject *object,
+ guint prop_id,
+ const GValue *value,
+ GParamSpec *pspec);
+static void xfce_titled_dialog_close (GtkDialog *dialog);
+static void xfce_titled_dialog_update_heading (XfceTitledDialog *titled_dialog);
+
+
+
+struct _XfceTitledDialogPrivate
+{
+ GtkWidget *heading;
+ gchar *subtitle;
+};
+
+
+
+G_DEFINE_TYPE (XfceTitledDialog, xfce_titled_dialog, GTK_TYPE_DIALOG);
+
+
+
+static void
+xfce_titled_dialog_class_init (XfceTitledDialogClass *klass)
+{
+ GtkDialogClass *gtkdialog_class;
+ GtkBindingSet *binding_set;
+ GObjectClass *gobject_class;
+
+ /* add our private data to the class */
+ g_type_class_add_private (klass, sizeof (XfceTitledDialogPrivate));
+
+ gobject_class = G_OBJECT_CLASS (klass);
+ gobject_class->finalize = xfce_titled_dialog_finalize;
+ gobject_class->get_property = xfce_titled_dialog_get_property;
+ gobject_class->set_property = xfce_titled_dialog_set_property;
+
+ gtkdialog_class = GTK_DIALOG_CLASS (klass);
+ gtkdialog_class->close = xfce_titled_dialog_close;
+
+ /**
+ * XfceTitledDialog:subtitle:
+ *
+ * The subtitle displayed below the main dialog title.
+ *
+ * Since: 4.4.0
+ **/
+ g_object_class_install_property (gobject_class,
+ PROP_SUBTITLE,
+ g_param_spec_string ("subtitle",
+ "subtitle",
+ "subtitle",
+ NULL,
+ G_PARAM_READWRITE));
+
+ /* connect additional key bindings to the GtkDialog::close action signal */
+ binding_set = gtk_binding_set_by_class (klass);
+ gtk_binding_entry_add_signal (binding_set, GDK_w, GDK_CONTROL_MASK, "close", 0);
+ gtk_binding_entry_add_signal (binding_set, GDK_W, GDK_CONTROL_MASK, "close", 0);
+}
+
+
+
+static void
+xfce_titled_dialog_init (XfceTitledDialog *titled_dialog)
+{
+ GtkWidget *line;
+ GtkWidget *vbox;
+
+ /* connect the private data */
+ titled_dialog->priv = XFCE_TITLED_DIALOG_GET_PRIVATE (titled_dialog);
+
+ /* remove the main dialog box from the window */
+ g_object_ref (G_OBJECT (GTK_DIALOG (titled_dialog)->vbox));
+ gtk_container_remove (GTK_CONTAINER (titled_dialog), GTK_DIALOG (titled_dialog)->vbox);
+
+ /* add a new vbox w/o border to the main window */
+ vbox = gtk_vbox_new (FALSE, 0);
+ gtk_container_add (GTK_CONTAINER (titled_dialog), vbox);
+ gtk_widget_show (vbox);
+
+ /* add the heading to the window */
+ titled_dialog->priv->heading = xfce_heading_new ();
+ gtk_box_pack_start (GTK_BOX (vbox), titled_dialog->priv->heading, FALSE, FALSE, 0);
+ gtk_widget_show (titled_dialog->priv->heading);
+
+ /* add the separator between header and content */
+ line = gtk_hseparator_new ();
+ gtk_box_pack_start (GTK_BOX (vbox), line, FALSE, FALSE, 0);
+ gtk_widget_show (line);
+
+ /* add the main dialog box to the new vbox */
+ gtk_box_pack_start (GTK_BOX (vbox), GTK_DIALOG (titled_dialog)->vbox, TRUE, TRUE, 0);
+ g_object_unref (G_OBJECT (GTK_DIALOG (titled_dialog)->vbox));
+
+ /* make sure to update the heading whenever one of the relevant window properties changes */
+ g_signal_connect (G_OBJECT (titled_dialog), "notify::icon", G_CALLBACK (xfce_titled_dialog_update_heading), NULL);
+ g_signal_connect (G_OBJECT (titled_dialog), "notify::icon-name", G_CALLBACK (xfce_titled_dialog_update_heading), NULL);
+ g_signal_connect (G_OBJECT (titled_dialog), "notify::title", G_CALLBACK (xfce_titled_dialog_update_heading), NULL);
+
+ /* initially update the heading properties */
+ xfce_titled_dialog_update_heading (titled_dialog);
+}
+
+
+
+
+static void
+xfce_titled_dialog_finalize (GObject *object)
+{
+ XfceTitledDialog *titled_dialog = XFCE_TITLED_DIALOG (object);
+
+ /* release the subtitle */
+ g_free (titled_dialog->priv->subtitle);
+
+ (*G_OBJECT_CLASS (xfce_titled_dialog_parent_class)->finalize) (object);
+}
+
+
+
+static void
+xfce_titled_dialog_get_property (GObject *object,
+ guint prop_id,
+ GValue *value,
+ GParamSpec *pspec)
+{
+ XfceTitledDialog *titled_dialog = XFCE_TITLED_DIALOG (object);
+
+ switch (prop_id)
+ {
+ case PROP_SUBTITLE:
+ g_value_set_string (value, xfce_titled_dialog_get_subtitle (titled_dialog));
+ break;
+
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ break;
+ }
+}
+
+
+
+static void
+xfce_titled_dialog_set_property (GObject *object,
+ guint prop_id,
+ const GValue *value,
+ GParamSpec *pspec)
+{
+ XfceTitledDialog *titled_dialog = XFCE_TITLED_DIALOG (object);
+
+ switch (prop_id)
+ {
+ case PROP_SUBTITLE:
+ xfce_titled_dialog_set_subtitle (titled_dialog, g_value_get_string (value));
+ break;
+
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ break;
+ }
+}
+
+
+
+static void
+xfce_titled_dialog_close (GtkDialog *dialog)
+{
+ GdkEvent *event;
+
+ /* verify that the dialog is realized */
+ if (G_LIKELY (GTK_WIDGET_REALIZED (dialog)))
+ {
+ /* send a delete event to the dialog */
+ event = gdk_event_new (GDK_DELETE);
+ event->any.window = g_object_ref (GTK_WIDGET (dialog)->window);
+ event->any.send_event = TRUE;
+ gtk_main_do_event (event);
+ gdk_event_free (event);
+ }
+}
+
+
+
+static void
+xfce_titled_dialog_update_heading (XfceTitledDialog *titled_dialog)
+{
+ /* update the heading properties using the window property values */
+ xfce_heading_set_icon (XFCE_HEADING (titled_dialog->priv->heading), gtk_window_get_icon (GTK_WINDOW (titled_dialog)));
+ xfce_heading_set_icon_name (XFCE_HEADING (titled_dialog->priv->heading), gtk_window_get_icon_name (GTK_WINDOW (titled_dialog)));
+ xfce_heading_set_title (XFCE_HEADING (titled_dialog->priv->heading), gtk_window_get_title (GTK_WINDOW (titled_dialog)));
+}
+
+
+
+/**
+ * xfce_titled_dialog_new:
+ *
+ * Allocates a new #XfceTitledDialog instance.
+ *
+ * Return value: the newly allocated #XfceTitledDialog.
+ *
+ * Since: 4.4.0
+ **/
+GtkWidget*
+xfce_titled_dialog_new (void)
+{
+ return g_object_new (XFCE_TYPE_TITLED_DIALOG, NULL);
+}
+
+
+
+/**
+ * xfce_titled_dialog_new_with_buttons:
+ * @title : title of the dialog, or %NULL.
+ * @parent : transient parent window of the dialog, or %NULL.
+ * @flags : from #GtkDialogFlags.
+ * @first_button_text : stock ID or text to go in first, or %NULL.
+ * @... : response ID for the first button, then additional buttons, ending with %NULL.
+ *
+ * See the documentation of gtk_dialog_new_with_buttons() for details about the
+ * parameters and the returned dialog.
+ *
+ * Return value: the newly allocated #XfceTitledDialog.
+ *
+ * Since: 4.4.0
+ **/
+GtkWidget*
+xfce_titled_dialog_new_with_buttons (const gchar *title,
+ GtkWindow *parent,
+ GtkDialogFlags flags,
+ const gchar *first_button_text,
+ ...)
+{
+ const gchar *button_text;
+ GtkWidget *dialog;
+ va_list args;
+ gint response_id;
+
+ /* allocate the dialog */
+ dialog = g_object_new (XFCE_TYPE_TITLED_DIALOG,
+ "destroy-with-parent", ((flags & GTK_DIALOG_DESTROY_WITH_PARENT) != 0),
+ "has-separator", ((flags & GTK_DIALOG_NO_SEPARATOR) == 0),
+ "modal", ((flags & GTK_DIALOG_MODAL) != 0),
+ "title", title,
+ NULL);
+
+ /* set the transient parent (if any) */
+ if (G_LIKELY (parent != NULL))
+ gtk_window_set_transient_for (GTK_WINDOW (dialog), parent);
+
+ /* add all additional buttons */
+ va_start (args, first_button_text);
+ for (button_text = first_button_text; button_text != NULL; )
+ {
+ response_id = va_arg (args, gint);
+ gtk_dialog_add_button (GTK_DIALOG (dialog), button_text, response_id);
+ button_text = va_arg (args, const gchar *);
+ }
+ va_end (args);
+
+ return dialog;
+}
+
+
+
+/**
+ * xfce_titled_dialog_get_subtitle:
+ * @titled_dialog : a #XfceTitledDialog.
+ *
+ * Returns the subtitle of the @titled_dialog, or %NULL
+ * if no subtitle is displayed in the @titled_dialog.
+ *
+ * Return value: the subtitle of @titled_dialog, or %NULL.
+ *
+ * Since: 4.4.0
+ **/
+G_CONST_RETURN gchar*
+xfce_titled_dialog_get_subtitle (XfceTitledDialog *titled_dialog)
+{
+ g_return_val_if_fail (XFCE_IS_TITLED_DIALOG (titled_dialog), NULL);
+ return titled_dialog->priv->subtitle;
+}
+
+
+
+/**
+ * xfce_titled_dialog_set_subtitle:
+ * @titled_dialog : a #XfceTitledDialog.
+ * @subtitle : the new subtitle for the @titled_dialog, or %NULL.
+ *
+ * Sets the subtitle displayed by @titled_dialog to @subtitle; if
+ * @subtitle is %NULL no subtitle will be displayed by the @titled_dialog.
+ *
+ * Since: 4.4.0
+ **/
+void
+xfce_titled_dialog_set_subtitle (XfceTitledDialog *titled_dialog,
+ const gchar *subtitle)
+{
+ g_return_if_fail (XFCE_IS_TITLED_DIALOG (titled_dialog));
+ g_return_if_fail (subtitle == NULL || g_utf8_validate (subtitle, -1, NULL));
+
+ /* release the previous subtitle */
+ g_free (titled_dialog->priv->subtitle);
+
+ /* activate the new subtitle */
+ titled_dialog->priv->subtitle = g_strdup (subtitle);
+
+ /* update the subtitle for the heading */
+ xfce_heading_set_subtitle (XFCE_HEADING (titled_dialog->priv->heading), subtitle);
+
+ /* notify listeners */
+ g_object_notify (G_OBJECT (titled_dialog), "subtitle");
+}
+
+
Copied: thunar/trunk/thunar/xfce-titled-dialog.h (from rev 23615, libexo/trunk/exo-support/xfce-titled-dialog.h)
===================================================================
--- thunar/trunk/thunar/xfce-titled-dialog.h (rev 0)
+++ thunar/trunk/thunar/xfce-titled-dialog.h 2006-11-03 19:35:40 UTC (rev 23617)
@@ -0,0 +1,75 @@
+/* $Id$ */
+/*-
+ * Copyright (c) 2006 Benedikt Meurer <benny at xfce.org>.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library 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
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library 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.
+ */
+
+#ifndef __XFCE_TITLED_DIALOG_H__
+#define __XFCE_TITLED_DIALOG_H__
+
+#include <gtk/gtk.h>
+
+G_BEGIN_DECLS;
+
+typedef struct _XfceTitledDialogPrivate XfceTitledDialogPrivate;
+typedef struct _XfceTitledDialogClass XfceTitledDialogClass;
+typedef struct _XfceTitledDialog XfceTitledDialog;
+
+#define XFCE_TYPE_TITLED_DIALOG (xfce_titled_dialog_get_type ())
+#define XFCE_TITLED_DIALOG(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), XFCE_TYPE_TITLED_DIALOG, XfceTitledDialog))
+#define XFCE_TITLED_DIALOG_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), XFCE_TYPE_TITLED_DIALOG, XfceTitledDialogClass))
+#define XFCE_IS_TITLED_DIALOG(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), XFCE_TYPE_TITLED_DIALOG))
+#define XFCE_IS_TITLED_DIALOG_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), XFCE_TYPE_TITLED_DIALOG))
+#define XFCE_TITLED_DIALOG_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), XFCE_TYPE_TITLED_DIALOG, XfceTitledDialogClass))
+
+struct _XfceTitledDialogClass
+{
+ /*< private >*/
+ GtkDialogClass __parent__;
+
+ /* reserved for future expansion */
+ void (*reserved0) (void);
+ void (*reserved1) (void);
+ void (*reserved2) (void);
+ void (*reserved3) (void);
+ void (*reserved4) (void);
+ void (*reserved5) (void);
+};
+
+struct _XfceTitledDialog
+{
+ /*< private >*/
+ GtkDialog __parent__;
+ XfceTitledDialogPrivate *priv;
+};
+
+GType xfce_titled_dialog_get_type (void) G_GNUC_CONST;
+
+GtkWidget *xfce_titled_dialog_new (void) G_GNUC_MALLOC;
+GtkWidget *xfce_titled_dialog_new_with_buttons (const gchar *title,
+ GtkWindow *parent,
+ GtkDialogFlags flags,
+ const gchar *first_button_text,
+ ...) G_GNUC_MALLOC;
+
+G_CONST_RETURN gchar *xfce_titled_dialog_get_subtitle (XfceTitledDialog *titled_dialog);
+void xfce_titled_dialog_set_subtitle (XfceTitledDialog *titled_dialog,
+ const gchar *subtitle);
+
+G_END_DECLS;
+
+#endif /* !__XFCE_TITLED_DIALOG_H__ */
More information about the Xfce4-commits
mailing list