Author: benny Date: 2007-01-12 09:28:31 +0000 (Fri, 12 Jan 2007) New Revision: 24366
Modified: thunar/trunk/ChangeLog thunar/trunk/thunar/thunar-window.c Log: 2007-01-12 Benedikt Meurer <[EMAIL PROTECTED]> * thunar/thunar-window.c: Finally fix crash on platforms where sizeof(GType) != sizeof(gint). Bug #2726. Modified: thunar/trunk/ChangeLog =================================================================== --- thunar/trunk/ChangeLog 2007-01-11 22:01:54 UTC (rev 24365) +++ thunar/trunk/ChangeLog 2007-01-12 09:28:31 UTC (rev 24366) @@ -1,3 +1,8 @@ +2007-01-12 Benedikt Meurer <[EMAIL PROTECTED]> + + * thunar/thunar-window.c: Finally fix crash on platforms where + sizeof(GType) != sizeof(gint). Bug #2726. + 2007-01-10 Benedikt Meurer <[EMAIL PROTECTED]> * thunar/thunar-gdk-extensions.{c,h}: Add new helper function Modified: thunar/trunk/thunar/thunar-window.c =================================================================== --- thunar/trunk/thunar/thunar-window.c 2007-01-11 22:01:54 UTC (rev 24365) +++ thunar/trunk/thunar/thunar-window.c 2007-01-12 09:28:31 UTC (rev 24366) @@ -1,6 +1,6 @@ /* $Id$ */ /*- - * Copyright (c) 2005-2006 Benedikt Meurer <[EMAIL PROTECTED]> + * Copyright (c) 2005-2007 Benedikt Meurer <[EMAIL PROTECTED]> * * This program is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the Free @@ -531,6 +531,56 @@ +static inline gint +view_type2index (GType type) +{ + /* this necessary for platforms where sizeof(GType) != sizeof(gint), + * see http://bugzilla.xfce.org/show_bug.cgi?id=2726 for details. + */ + if (sizeof (GType) == sizeof (gint)) + { + /* no need to map anything */ + return (gint) type; + } + else + { + /* map from types to unique indices */ + if (G_LIKELY (type == THUNAR_TYPE_COMPACT_VIEW)) + return 0; + else if (type == THUNAR_TYPE_DETAILS_VIEW) + return 1; + else + return 2; + } +} + + + +static inline GType +view_index2type (gint index) +{ + /* this necessary for platforms where sizeof(GType) != sizeof(gint), + * see http://bugzilla.xfce.org/show_bug.cgi?id=2726 for details. + */ + if (sizeof (GType) == sizeof (gint)) + { + /* no need to map anything */ + return (GType) index; + } + else + { + /* map from indices to unique types */ + switch (index) + { + case 0: return THUNAR_TYPE_COMPACT_VIEW; + case 1: return THUNAR_TYPE_DETAILS_VIEW; + default: return THUNAR_TYPE_ICON_VIEW; + } + } +} + + + static void thunar_window_init (ThunarWindow *window) { @@ -605,21 +655,21 @@ * add view options */ radio_action = gtk_radio_action_new ("view-as-icons", _("View as _Icons"), _("Display folder content in an icon view"), - NULL, THUNAR_TYPE_ICON_VIEW); + NULL, view_type2index (THUNAR_TYPE_ICON_VIEW)); gtk_action_group_add_action_with_accel (window->action_group, GTK_ACTION (radio_action), "<control>1"); gtk_radio_action_set_group (radio_action, NULL); group = gtk_radio_action_get_group (radio_action); g_object_unref (G_OBJECT (radio_action)); radio_action = gtk_radio_action_new ("view-as-detailed-list", _("View as _Detailed List"), _("Display folder content in a detailed list view"), - NULL, THUNAR_TYPE_DETAILS_VIEW); + NULL, view_type2index (THUNAR_TYPE_DETAILS_VIEW)); gtk_action_group_add_action_with_accel (window->action_group, GTK_ACTION (radio_action), "<control>2"); gtk_radio_action_set_group (radio_action, group); group = gtk_radio_action_get_group (radio_action); g_object_unref (G_OBJECT (radio_action)); radio_action = gtk_radio_action_new ("view-as-compact-list", _("View as _Compact List"), _("Display folder content in a compact list view"), - NULL, THUNAR_TYPE_COMPACT_VIEW); + NULL, view_type2index (THUNAR_TYPE_COMPACT_VIEW)); gtk_action_group_add_action_with_accel (window->action_group, GTK_ACTION (radio_action), "<control>3"); gtk_radio_action_set_group (radio_action, group); group = gtk_radio_action_get_group (radio_action); @@ -758,7 +808,7 @@ /* activate the selected view */ action = gtk_action_group_get_action (window->action_group, "view-as-icons"); - exo_gtk_radio_action_set_current_value (GTK_RADIO_ACTION (action), g_type_is_a (type, THUNAR_TYPE_VIEW) ? type : THUNAR_TYPE_ICON_VIEW); + exo_gtk_radio_action_set_current_value (GTK_RADIO_ACTION (action), view_type2index (g_type_is_a (type, THUNAR_TYPE_VIEW) ? type : THUNAR_TYPE_ICON_VIEW)); g_signal_connect (G_OBJECT (action), "changed", G_CALLBACK (thunar_window_action_view_changed), window); thunar_window_action_view_changed (GTK_RADIO_ACTION (action), GTK_RADIO_ACTION (action), window); @@ -1632,7 +1682,7 @@ } /* determine the new type of view */ - type = gtk_radio_action_get_current_value (action); + type = view_index2type (gtk_radio_action_get_current_value (action)); /* allocate a new view of the requested type */ if (G_LIKELY (type != G_TYPE_NONE)) _______________________________________________ Xfce4-commits mailing list Xfce4-commits@xfce.org http://foo-projects.org/mailman/listinfo/xfce4-commits