Updating branch refs/heads/master to 63c6f29cb2bf01c87720e22e2b02ef814b7fa58a (commit) from 6ff624afc831dcb13d783c8d919ed73e40fb3822 (commit)
commit 63c6f29cb2bf01c87720e22e2b02ef814b7fa58a Author: Nick Schermer <n...@xfce.org> Date: Sun Jan 22 12:25:31 2012 +0100 Store window and column sizes in xfconf. This allows to use fixed_height mode as well, which gives a nice performance boost. dialogs/mime-settings/Makefile.am | 4 +- dialogs/mime-settings/main.c | 12 ++++- dialogs/mime-settings/xfce-mime-window.c | 86 +++++++++++++++++++++++++++-- 3 files changed, 93 insertions(+), 9 deletions(-) diff --git a/dialogs/mime-settings/Makefile.am b/dialogs/mime-settings/Makefile.am index 29a79be..dd548a3 100644 --- a/dialogs/mime-settings/Makefile.am +++ b/dialogs/mime-settings/Makefile.am @@ -21,6 +21,7 @@ xfce4_mime_settings_CFLAGS = \ $(GIO_CFLAGS) \ $(GIO_UNIX_CFLAGS) \ $(LIBXFCE4UI_CFLAGS) \ + $(XFCONF_CFLAGS) \ $(PLATFORM_CFLAGS) xfce4_mime_settings_LDFLAGS = \ @@ -31,7 +32,8 @@ xfce4_mime_settings_LDADD = \ $(GTK_LIBS) \ $(LIBXFCE4UI_LIBS) \ $(GIO_LIBS) \ - $(GIO_UNIX_LIBS) + $(GIO_UNIX_LIBS) \ + $(XFCONF_LIBS) desktopdir = $(datadir)/applications desktop_in_files = xfce4-mime-settings.desktop.in diff --git a/dialogs/mime-settings/main.c b/dialogs/mime-settings/main.c index 02014f2..bddf6d7 100644 --- a/dialogs/mime-settings/main.c +++ b/dialogs/mime-settings/main.c @@ -28,6 +28,7 @@ #include <gtk/gtk.h> #include <libxfce4util/libxfce4util.h> +#include <xfconf/xfconf.h> #include "xfce-mime-window.h" @@ -76,7 +77,7 @@ main (gint argc, gchar **argv) if (G_UNLIKELY (opt_version)) { g_print ("%s %s (Xfce %s)\n\n", G_LOG_DOMAIN, PACKAGE_VERSION, xfce_version_string ()); - g_print ("%s\n", "Copyright (c) 2008-2011"); + g_print ("%s\n", "Copyright (c) 2008-2012"); g_print ("\t%s\n\n", _("The Xfce development team. All rights reserved.")); g_print (_("Please report bugs to <%s>."), PACKAGE_BUGREPORT); g_print ("\n"); @@ -84,13 +85,20 @@ main (gint argc, gchar **argv) return EXIT_SUCCESS; } + if (!xfconf_init (&error)) + { + g_critical ("Failed to initialize xfconf: %s", error->message); + g_error_free (error); + } + window = g_object_new (XFCE_TYPE_MIME_WINDOW, NULL); - gtk_window_set_default_size (GTK_WINDOW (window), 550, 400); g_signal_connect (G_OBJECT (window), "response", G_CALLBACK (gtk_main_quit), NULL); gtk_window_present (GTK_WINDOW (window)); gtk_main (); + xfconf_shutdown (); + return EXIT_SUCCESS; } diff --git a/dialogs/mime-settings/xfce-mime-window.c b/dialogs/mime-settings/xfce-mime-window.c index a51316b..3842624 100644 --- a/dialogs/mime-settings/xfce-mime-window.c +++ b/dialogs/mime-settings/xfce-mime-window.c @@ -29,6 +29,7 @@ #include <libxfce4util/libxfce4util.h> #include <libxfce4ui/libxfce4ui.h> #include <gio/gdesktopappinfo.h> +#include <xfconf/xfconf.h> #include "xfce-mime-window.h" #include "xfce-mime-chooser.h" @@ -36,6 +37,8 @@ static void xfce_mime_window_finalize (GObject *object); +static gboolean xfce_mime_window_delete_event (GtkWidget *widget, + GdkEventAny *event); static gint xfce_mime_window_mime_model (XfceMimeWindow *window); static void xfce_mime_window_filter_changed (GtkEntry *entry, XfceMimeWindow *window); @@ -72,6 +75,8 @@ struct _XfceMimeWindow { XfceTitledDialog __parent__; + XfconfChannel *channel; + GtkWidget *treeview; PangoAttrList *attrs_bold; @@ -124,11 +129,15 @@ G_DEFINE_TYPE (XfceMimeWindow, xfce_mime_window, XFCE_TYPE_TITLED_DIALOG) static void xfce_mime_window_class_init (XfceMimeWindowClass *klass) { - GObjectClass *gobject_class; + GObjectClass *gobject_class; + GtkWidgetClass *gtkwidget_class; gobject_class = G_OBJECT_CLASS (klass); gobject_class->finalize = xfce_mime_window_finalize; + gtkwidget_class = GTK_WIDGET_CLASS (klass); + gtkwidget_class->delete_event = xfce_mime_window_delete_event; + gtk_rc_parse_string ("style \"mime-statusbar-internal\" {\n" " GtkStatusbar::shadow-type = GTK_SHADOW_NONE\n" "}\n" @@ -155,6 +164,8 @@ xfce_mime_window_init (XfceMimeWindow *window) GtkTreeViewColumn *column; GtkCellRenderer *renderer; + window->channel = xfconf_channel_new ("xfce4-mime-settings"); + window->attrs_bold = pango_attr_list_new (); pango_attr_list_insert (window->attrs_bold, pango_attr_weight_new (PANGO_WEIGHT_BOLD)); @@ -166,6 +177,11 @@ xfce_mime_window_init (XfceMimeWindow *window) xfce_titled_dialog_set_subtitle (XFCE_TITLED_DIALOG (window), _("Associate applications with MIME types")); + /* restore old user size */ + gtk_window_set_default_size (GTK_WINDOW (window), + xfconf_channel_get_int (window->channel, "/last/window-width", 550), + xfconf_channel_get_int (window->channel, "/last/window-height", 400)); + /* don't act like a dialog, hide the button box */ area = gtk_dialog_get_action_area (GTK_DIALOG (window)); gtk_widget_hide (area); @@ -225,6 +241,7 @@ xfce_mime_window_init (XfceMimeWindow *window) treeview = gtk_tree_view_new_with_model (GTK_TREE_MODEL (window->filter_model)); gtk_tree_view_set_headers_visible (GTK_TREE_VIEW (treeview), TRUE); gtk_tree_view_set_headers_clickable (GTK_TREE_VIEW (treeview), TRUE); + gtk_tree_view_set_fixed_height_mode (GTK_TREE_VIEW (treeview), TRUE); gtk_tree_view_set_enable_search (GTK_TREE_VIEW (treeview), FALSE); gtk_container_add (GTK_CONTAINER (scroll), treeview); gtk_widget_show (treeview); @@ -241,16 +258,17 @@ xfce_mime_window_init (XfceMimeWindow *window) gtk_tree_view_column_set_clickable (column, TRUE); gtk_tree_view_column_set_sort_indicator (column, TRUE); gtk_tree_view_column_set_resizable (column, TRUE); + gtk_tree_view_column_set_sizing (column, GTK_TREE_VIEW_COLUMN_FIXED); g_signal_connect (G_OBJECT (column), "clicked", G_CALLBACK (xfce_mime_window_column_clicked), window); gtk_tree_view_append_column (GTK_TREE_VIEW (treeview), column); - /* HACK, wont work in gtk3 */ - /* give the first column some initial size that doesn't restrict anything - * later. Expanding this column will resize the view when a setting - * is changed */ - column->resized_width = 300; + /* HACK */ + /* https://bugzilla.gnome.org/show_bug.cgi?id=668428 */ column->use_resized_width = TRUE; + column->resized_width = xfconf_channel_get_int (window->channel, + "/last/mime-width", + 300); renderer = gtk_cell_renderer_pixbuf_new (); gtk_cell_layout_pack_start (GTK_CELL_LAYOUT (column), renderer, FALSE); @@ -269,10 +287,17 @@ xfce_mime_window_init (XfceMimeWindow *window) gtk_tree_view_column_set_title (column, _("Status")); gtk_tree_view_column_set_clickable (column, TRUE); gtk_tree_view_column_set_resizable (column, TRUE); + gtk_tree_view_column_set_sizing (column, GTK_TREE_VIEW_COLUMN_FIXED); g_signal_connect (G_OBJECT (column), "clicked", G_CALLBACK (xfce_mime_window_column_clicked), window); gtk_tree_view_append_column (GTK_TREE_VIEW (treeview), column); + /* HACK */ + column->use_resized_width = TRUE; + column->resized_width = xfconf_channel_get_int (window->channel, + "/last/status-width", + 75); + renderer = gtk_cell_renderer_text_new (); gtk_cell_layout_pack_start (GTK_CELL_LAYOUT (column), renderer, FALSE); gtk_cell_layout_set_attributes (GTK_CELL_LAYOUT (column), renderer, @@ -283,10 +308,17 @@ xfce_mime_window_init (XfceMimeWindow *window) gtk_tree_view_column_set_title (column, _("Default Application")); gtk_tree_view_column_set_clickable (column, TRUE); gtk_tree_view_column_set_resizable (column, TRUE); + gtk_tree_view_column_set_sizing (column, GTK_TREE_VIEW_COLUMN_FIXED); g_signal_connect (G_OBJECT (column), "clicked", G_CALLBACK (xfce_mime_window_column_clicked), window); gtk_tree_view_append_column (GTK_TREE_VIEW (treeview), column); + /* HACK */ + column->use_resized_width = TRUE; + column->resized_width = xfconf_channel_get_int (window->channel, + "/last/default-width", + 100); + renderer = gtk_cell_renderer_combo_new (); g_signal_connect (G_OBJECT (renderer), "editing-started", G_CALLBACK (xfce_mime_window_combo_populate), window); @@ -312,6 +344,7 @@ xfce_mime_window_finalize (GObject *object) g_object_unref (G_OBJECT (window->filter_model)); g_object_unref (G_OBJECT (window->mime_model)); + g_object_unref (G_OBJECT (window->channel)); pango_attr_list_unref (window->attrs_bold); @@ -320,6 +353,47 @@ xfce_mime_window_finalize (GObject *object) +static gboolean +xfce_mime_window_delete_event (GtkWidget *widget, + GdkEventAny *event) +{ + XfceMimeWindow *window = XFCE_MIME_WINDOW (widget); + gint width, height; + GtkTreeViewColumn *column; + guint i; + const gchar *columns[] = { "mime", "status", "default" }; + gchar prop[32]; + GdkWindowState state; + + g_return_val_if_fail (XFCONF_IS_CHANNEL (window->channel), FALSE); + + /* don't save the state for full-screen windows */ + state = gdk_window_get_state (GTK_WIDGET (window)->window); + if ((state & (GDK_WINDOW_STATE_MAXIMIZED | GDK_WINDOW_STATE_FULLSCREEN)) == 0) + { + /* save window size */ + gtk_window_get_size (GTK_WINDOW (widget), &width, &height); + xfconf_channel_set_int (window->channel, "/last/window-width", width), + xfconf_channel_set_int (window->channel, "/last/window-height", height); + + /* save column positions */ + for (i = 0; i < G_N_ELEMENTS (columns); i++) + { + column = gtk_tree_view_get_column (GTK_TREE_VIEW (window->treeview), i); + g_snprintf (prop, sizeof (prop), "/last/%s-width", columns[i]); + xfconf_channel_set_int (window->channel, prop, + gtk_tree_view_column_get_width (column)); + } + } + + if (GTK_WIDGET_CLASS (xfce_mime_window_parent_class)->delete_event != NULL) + return (*GTK_WIDGET_CLASS (xfce_mime_window_parent_class)->delete_event) (widget, event); + else + return FALSE; +} + + + static GHashTable * xfce_mime_window_mime_user (void) { _______________________________________________ Xfce4-commits mailing list Xfce4-commits@xfce.org https://mail.xfce.org/mailman/listinfo/xfce4-commits