From 90b3d9fe2b4224103e67397db40f85c244bd1b55 Mon Sep 17 00:00:00 2001 From: Nick Schermer <nick@xfce.org> Date: Sat, 17 Oct 2009 18:10:29 +0200 Subject: [PATCH] Link Thunar to libxfce4ui. This will drop some code from Thunar and share the important code for spawning application with the rest of Xfce. --- configure.in.in | 1 + thunar/Makefile.am | 10 +- thunar/thunar-preferences-dialog.c | 3 +- thunar/xfce-heading.c | 753 ----------------------------- thunar/xfce-heading.h | 82 ---- thunar/xfce-titled-dialog.c | 368 -------------- thunar/xfce-titled-dialog.h | 75 --- 7 files changed, 7 insertions(+), 1285 deletions(-) delete mode 100644 thunar/xfce-heading.c delete mode 100644 thunar/xfce-heading.h delete mode 100644 thunar/xfce-titled-dialog.c delete mode 100644 thunar/xfce-titled-dialog.h diff --git a/configure.in.in b/configure.in.in index a591e4158..2ccfeac77 100644 --- a/configure.in.in +++ b/configure.in.in @@ -144,6 +144,7 @@ XDT_CHECK_PACKAGE([GTHREAD], [gthread-2.0], [2.18.0]) XDT_CHECK_PACKAGE([GTK], [gtk+-2.0], [2.14.0]) XDT_CHECK_PACKAGE([GDK_PIXBUF], [gdk-pixbuf-2.0], [2.14.0]) XDT_CHECK_PACKAGE([LIBXFCE4UTIL], [libxfce4util-1.0], [4.6.0]) +XDT_CHECK_PACKAGE([LIBXFCE4UI], [libxfce4ui-1], [4.7.0]) dnl ******************************************** dnl *** Check for session management support *** diff --git a/thunar/Makefile.am b/thunar/Makefile.am index 4f606b752..6c5b20c0c 100644 --- a/thunar/Makefile.am +++ b/thunar/Makefile.am @@ -215,11 +215,7 @@ Thunar_SOURCES = \ thunar-view.h \ thunar-window.c \ thunar-window.h \ - thunar-window-ui.h \ - xfce-heading.c \ - xfce-heading.h \ - xfce-titled-dialog.c \ - xfce-titled-dialog.h + thunar-window-ui.h Thunar_CFLAGS = \ $(EXO_CFLAGS) \ @@ -227,6 +223,7 @@ Thunar_CFLAGS = \ $(GIO_CFLAGS) \ $(LIBSM_CFLAGS) \ $(LIBSTARTUP_NOTIFICATION_CFLAGS) \ + $(LIBXFCE4UI_CFLAGS) \ $(PLATFORM_CFLAGS) Thunar_LDFLAGS = \ @@ -241,7 +238,8 @@ Thunar_LDADD = \ $(GTHREAD_LIBS) \ $(GIO_LIBS) \ $(LIBSTARTUP_NOTIFICATION_LIBS) \ - $(LIBSM_LIBS) + $(LIBSM_LIBS) \ + $(LIBXFCE4UI_LIBS) Thunar_DEPENDENCIES = \ $(top_builddir)/tdb/libtdb.la \ diff --git a/thunar/thunar-preferences-dialog.c b/thunar/thunar-preferences-dialog.c index 536e5c1d3..504db2cc0 100644 --- a/thunar/thunar-preferences-dialog.c +++ b/thunar/thunar-preferences-dialog.c @@ -21,6 +21,8 @@ #include <config.h> #endif +#include <libxfce4ui/libxfce4ui.h> + #include <thunar/sexy-url-label.h> #include <thunar/thunar-compact-view.h> #include <thunar/thunar-details-view.h> @@ -33,7 +35,6 @@ #include <thunar/thunar-preferences.h> #include <thunar/thunar-private.h> #include <thunar/thunar-util.h> -#include <thunar/xfce-titled-dialog.h> diff --git a/thunar/xfce-heading.c b/thunar/xfce-heading.c deleted file mode 100644 index ec738fccb..000000000 --- a/thunar/xfce-heading.c +++ /dev/null @@ -1,753 +0,0 @@ -/* $Id$ */ -/*- - * Copyright (c) 2006 Benedikt Meurer <benny@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_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"); -} - - diff --git a/thunar/xfce-heading.h b/thunar/xfce-heading.h deleted file mode 100644 index a7df30256..000000000 --- a/thunar/xfce-heading.h +++ /dev/null @@ -1,82 +0,0 @@ -/* $Id$ */ -/*- - * Copyright (c) 2006 Benedikt Meurer <benny@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__ */ diff --git a/thunar/xfce-titled-dialog.c b/thunar/xfce-titled-dialog.c deleted file mode 100644 index 44b50fd18..000000000 --- a/thunar/xfce-titled-dialog.c +++ /dev/null @@ -1,368 +0,0 @@ -/* $Id$ */ -/*- - * Copyright (c) 2006 Benedikt Meurer <benny@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_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"); -} - - diff --git a/thunar/xfce-titled-dialog.h b/thunar/xfce-titled-dialog.h deleted file mode 100644 index d5410f262..000000000 --- a/thunar/xfce-titled-dialog.h +++ /dev/null @@ -1,75 +0,0 @@ -/* $Id$ */ -/*- - * Copyright (c) 2006 Benedikt Meurer <benny@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__ */ -- GitLab