[Xfce4-commits] r23207 - xarchiver/branches/xarchiver-psybsd/src
Stephan Arts
stephan at xfce.org
Mon Sep 25 19:39:00 UTC 2006
Author: stephan
Date: 2006-09-25 19:38:58 +0000 (Mon, 25 Sep 2006)
New Revision: 23207
Modified:
xarchiver/branches/xarchiver-psybsd/src/add_dialog.c
xarchiver/branches/xarchiver-psybsd/src/main_window.c
Log:
Fixed segfault when changing to non-freedesktop-compliant-icon-theme Rodent.
Modified: xarchiver/branches/xarchiver-psybsd/src/add_dialog.c
===================================================================
--- xarchiver/branches/xarchiver-psybsd/src/add_dialog.c 2006-09-25 14:30:44 UTC (rev 23206)
+++ xarchiver/branches/xarchiver-psybsd/src/add_dialog.c 2006-09-25 19:38:58 UTC (rev 23207)
@@ -63,16 +63,34 @@
xa_add_dialog_init(XAAddDialog *dialog)
{
GtkWidget *frame = gtk_frame_new(_("Files and folders to add"));
+ GtkWidget *vbox = gtk_vbox_new(FALSE, 0);
+ GtkWidget *hbox = gtk_hbox_new(FALSE, 5);
+ GtkWidget *button;
+ gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dialog)->vbox), frame, TRUE, TRUE, 5);
+
dialog->scrolled_window = gtk_scrolled_window_new(NULL, NULL);
-
gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(dialog->scrolled_window), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW (dialog->scrolled_window), GTK_SHADOW_IN);
gtk_container_set_border_width(GTK_CONTAINER(dialog->scrolled_window), 5);
- gtk_container_add(GTK_CONTAINER(frame), dialog->scrolled_window);
+ gtk_container_add(GTK_CONTAINER(frame), vbox);
+ gtk_box_pack_start(GTK_BOX(vbox), dialog->scrolled_window, FALSE, FALSE, 0);
+ gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, FALSE, 0);
+ vbox = gtk_vbox_new(FALSE, 0);
- gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dialog)->vbox), frame, TRUE, TRUE, 5);
+ button = gtk_radio_button_new_with_mnemonic(NULL, _("Files"));
+ gtk_box_pack_start(GTK_BOX(vbox), button, FALSE, FALSE, 0);
+ button = gtk_radio_button_new_with_mnemonic_from_widget(GTK_RADIO_BUTTON(button), _("Folders"));
+ gtk_box_pack_start(GTK_BOX(vbox), button, FALSE, FALSE, 0);
+
+ gtk_box_pack_start(GTK_BOX(hbox), vbox, FALSE, FALSE, 0);
+
+ button = gtk_button_new_from_stock("gtk-remove");
+ gtk_box_pack_start(GTK_BOX(hbox), button, FALSE, FALSE, 0);
+ button = gtk_button_new_from_stock("gtk-add");
+ gtk_box_pack_start(GTK_BOX(hbox), button, FALSE, FALSE, 0);
+
gtk_widget_show_all(frame);
-
+ gtk_widget_show_all(vbox);
gtk_dialog_add_buttons(GTK_DIALOG(dialog),
GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
GTK_STOCK_ADD, GTK_RESPONSE_OK,
Modified: xarchiver/branches/xarchiver-psybsd/src/main_window.c
===================================================================
--- xarchiver/branches/xarchiver-psybsd/src/main_window.c 2006-09-25 14:30:44 UTC (rev 23206)
+++ xarchiver/branches/xarchiver-psybsd/src/main_window.c 2006-09-25 19:38:58 UTC (rev 23207)
@@ -45,8 +45,13 @@
xa_main_window_set_property(GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec);
static void
xa_main_window_get_property(GObject *object, guint prop_id, GValue *value, GParamSpec *pspec);
+static void
+cb_xa_main_window_style_set(XAMainWindow *window, gpointer userdata);
void
+xa_main_window_reset_columns(XAMainWindow *window);
+
+void
cb_xa_main_item_activated(GtkTreeView *treeview, GtkTreePath *treepath, GtkTreeViewColumn *column, gpointer userdata);
void
@@ -269,23 +274,25 @@
gtk_widget_show_all(window->statusbar);
gtk_container_add(GTK_CONTAINER(window), main_vbox);
+ g_signal_connect(G_OBJECT(window), "style-set", G_CALLBACK(cb_xa_main_window_style_set), NULL);
}
GtkWidget *
xa_main_window_new(GtkIconTheme *icon_theme)
{
GtkWidget *window;
- GdkPixbuf *icon = gtk_icon_theme_load_icon(icon_theme, "xarchiver", 24, 0, NULL);
+ GdkPixbuf *icon;
window = g_object_new(xa_main_window_get_type(),
"title", "Xarchiver " PACKAGE_VERSION,
"show-icons", TRUE,
NULL);
-
+
XA_MAIN_WINDOW(window)->icon_theme = icon_theme;
-
+
+ icon = gtk_icon_theme_load_icon(icon_theme, "xarchiver", 24, 0, NULL);
+
gtk_window_set_icon(GTK_WINDOW(window), icon);
-
return window;
}
@@ -312,6 +319,27 @@
}
}
+static void
+cb_xa_main_window_style_set(XAMainWindow *window, gpointer userdata)
+{
+ GSList *items = NULL;
+
+ if(window->working_node)
+ items = ((LXAEntry *)window->working_node->data)->children;
+
+ if(!gtk_icon_theme_has_icon(window->icon_theme, "folder"))
+ window->props._show_icons = FALSE;
+ else
+ window->props._show_icons = TRUE;
+
+ if(items)
+ {
+ xa_main_window_reset_columns(window);
+ xa_main_window_set_contents(window, window->lp_xa_archive, items);
+ }
+
+}
+
GtkWidget *
xa_main_window_find_image(gchar *filename, GtkIconSize size)
{
@@ -559,10 +587,6 @@
void
xa_main_window_archive_status_changed(LXAArchive *archive, gpointer userdata)
{
- GtkCellRenderer *renderer = NULL;
- GtkTreeViewColumn *column = NULL;
- GtkListStore *liststore = NULL;
- gint x = 0;
XAMainWindow *main_window = XA_MAIN_WINDOW(userdata);
gchar *status_message = NULL;
switch(archive->status)
@@ -600,62 +624,8 @@
gtk_widget_set_sensitive(GTK_WIDGET(main_window->toolbar.tool_item_remove), TRUE);
gtk_widget_set_sensitive(GTK_WIDGET(main_window->toolbar.tool_item_extract), TRUE);
- GList *columns = gtk_tree_view_get_columns(GTK_TREE_VIEW(main_window->treeview));
- while(columns)
- {
- gtk_tree_view_remove_column(GTK_TREE_VIEW(main_window->treeview), columns->data);
- columns = columns->next;
- }
- g_list_free(columns);
-
- if(main_window->props._show_icons)
- {
- GType *column_types = g_new0(GType, archive->column_number+1);
- for(x = 0; x < archive->column_number; x++)
- {
- column_types[x+1] = archive->column_types[x];
- }
- column_types[0] = G_TYPE_STRING;
- liststore = gtk_list_store_newv(archive->column_number+1, column_types);
+ xa_main_window_reset_columns(main_window);
- renderer = gtk_cell_renderer_pixbuf_new();
- column = gtk_tree_view_column_new_with_attributes("", renderer, "icon-name", 0, NULL);
- gtk_tree_view_column_set_resizable(column, TRUE);
- gtk_tree_view_column_set_sort_column_id(column, 0);
- gtk_tree_view_append_column(GTK_TREE_VIEW(main_window->treeview), column);
- for(x = 0; x < archive->column_number; x++)
- {
- switch(archive->column_types[x])
- {
- case(G_TYPE_STRING):
- case(G_TYPE_UINT64):
- renderer = gtk_cell_renderer_text_new();
- column = gtk_tree_view_column_new_with_attributes(archive->column_names[x], renderer, "text", x+1, NULL);
- break;
- }
- gtk_tree_view_column_set_resizable(column, TRUE);
- gtk_tree_view_column_set_sort_column_id(column, x+1);
- gtk_tree_view_append_column(GTK_TREE_VIEW(main_window->treeview), column);
- }
- } else
- {
- liststore = gtk_list_store_newv(archive->column_number, archive->column_types);
- for(x = 0; x < archive->column_number; x++)
- {
- switch(archive->column_types[x])
- {
- case(G_TYPE_STRING):
- case(G_TYPE_UINT64):
- renderer = gtk_cell_renderer_text_new();
- column = gtk_tree_view_column_new_with_attributes(archive->column_names[x], renderer, "text", x, NULL);
- break;
- }
- gtk_tree_view_column_set_resizable(column, TRUE);
- gtk_tree_view_column_set_sort_column_id(column, x);
- gtk_tree_view_append_column(GTK_TREE_VIEW(main_window->treeview), column);
- }
- }
- gtk_tree_view_set_model(GTK_TREE_VIEW(main_window->treeview), GTK_TREE_MODEL(liststore));
main_window->working_node = g_slist_prepend(main_window->working_node, &(archive->root_entry));
xa_main_window_set_contents(main_window, archive, archive->root_entry.children);
}
@@ -692,8 +662,73 @@
gtk_statusbar_push(GTK_STATUSBAR(main_window->statusbar), 1, status_message);
}
+void
+xa_main_window_reset_columns(XAMainWindow *window)
+{
+ GtkCellRenderer *renderer = NULL;
+ GtkTreeViewColumn *column = NULL;
+ GtkListStore *liststore = NULL;
+ LXAArchive *archive = window->lp_xa_archive;
+ gint x = 0;
+ GList *columns = gtk_tree_view_get_columns(GTK_TREE_VIEW(window->treeview));
+ while(columns)
+ {
+ gtk_tree_view_remove_column(GTK_TREE_VIEW(window->treeview), columns->data);
+ columns = columns->next;
+ }
+ g_list_free(columns);
-void
+ if(window->props._show_icons)
+ {
+ GType *column_types = g_new0(GType, archive->column_number+1);
+ for(x = 0; x < archive->column_number; x++)
+ {
+ column_types[x+1] = archive->column_types[x];
+ }
+ column_types[0] = G_TYPE_STRING;
+ liststore = gtk_list_store_newv(archive->column_number+1, column_types);
+
+ renderer = gtk_cell_renderer_pixbuf_new();
+ column = gtk_tree_view_column_new_with_attributes("", renderer, "icon-name", 0, NULL);
+ gtk_tree_view_column_set_resizable(column, TRUE);
+ gtk_tree_view_column_set_sort_column_id(column, 0);
+ gtk_tree_view_append_column(GTK_TREE_VIEW(window->treeview), column);
+ for(x = 0; x < archive->column_number; x++)
+ {
+ switch(archive->column_types[x])
+ {
+ case(G_TYPE_STRING):
+ case(G_TYPE_UINT64):
+ renderer = gtk_cell_renderer_text_new();
+ column = gtk_tree_view_column_new_with_attributes(archive->column_names[x], renderer, "text", x+1, NULL);
+ break;
+ }
+ gtk_tree_view_column_set_resizable(column, TRUE);
+ gtk_tree_view_column_set_sort_column_id(column, x+1);
+ gtk_tree_view_append_column(GTK_TREE_VIEW(window->treeview), column);
+ }
+ } else
+ {
+ liststore = gtk_list_store_newv(archive->column_number, archive->column_types);
+ for(x = 0; x < archive->column_number; x++)
+ {
+ switch(archive->column_types[x])
+ {
+ case(G_TYPE_STRING):
+ case(G_TYPE_UINT64):
+ renderer = gtk_cell_renderer_text_new();
+ column = gtk_tree_view_column_new_with_attributes(archive->column_names[x], renderer, "text", x, NULL);
+ break;
+ }
+ gtk_tree_view_column_set_resizable(column, TRUE);
+ gtk_tree_view_column_set_sort_column_id(column, x);
+ gtk_tree_view_append_column(GTK_TREE_VIEW(window->treeview), column);
+ }
+ }
+ gtk_tree_view_set_model(GTK_TREE_VIEW(window->treeview), GTK_TREE_MODEL(liststore));
+}
+
+void
xa_main_window_set_contents(XAMainWindow *main_window, LXAArchive *archive, GSList *items)
{
gint i = 0;
@@ -706,6 +741,7 @@
gtk_list_store_clear(GTK_LIST_STORE(liststore));
+
while(items)
{
i = 0;
@@ -764,7 +800,13 @@
{
gtk_list_store_prepend(GTK_LIST_STORE(liststore), &iter);
if(main_window->props._show_icons)
+ {
+ tmp_value = g_new0(GValue, 1);
+ tmp_value = g_value_init(tmp_value, G_TYPE_STRING);
+ g_value_set_string(tmp_value, "go-up");
+ gtk_list_store_set_value(GTK_LIST_STORE(liststore), &iter, 0, tmp_value);
gtk_list_store_set_value(GTK_LIST_STORE(liststore), &iter, 1, main_window->parent_node);
+ }
else
gtk_list_store_set_value(GTK_LIST_STORE(liststore), &iter, 0, main_window->parent_node);
}
More information about the Xfce4-commits
mailing list