[Xfce4-commits] r23446 - in xarchiver/branches/xarchiver-psybsd: libxarchiver src
Stephan Arts
stephan at xfce.org
Tue Oct 17 18:52:58 UTC 2006
Author: stephan
Date: 2006-10-17 18:52:57 +0000 (Tue, 17 Oct 2006)
New Revision: 23446
Modified:
xarchiver/branches/xarchiver-psybsd/libxarchiver/archive.c
xarchiver/branches/xarchiver-psybsd/src/archive_store.c
xarchiver/branches/xarchiver-psybsd/src/main_window.c
xarchiver/branches/xarchiver-psybsd/src/navigation_bar.c
xarchiver/branches/xarchiver-psybsd/src/navigation_bar.h
xarchiver/branches/xarchiver-psybsd/src/path_bar.c
xarchiver/branches/xarchiver-psybsd/src/path_bar.h
xarchiver/branches/xarchiver-psybsd/src/tool_bar.c
xarchiver/branches/xarchiver-psybsd/src/tool_bar.h
Log:
Peter and I fixed stuff.
Modified: xarchiver/branches/xarchiver-psybsd/libxarchiver/archive.c
===================================================================
--- xarchiver/branches/xarchiver-psybsd/libxarchiver/archive.c 2006-10-17 18:35:58 UTC (rev 23445)
+++ xarchiver/branches/xarchiver-psybsd/libxarchiver/archive.c 2006-10-17 18:52:57 UTC (rev 23446)
@@ -197,10 +197,10 @@
LXAEntry *tmp_entry = NULL, *parent = NULL;
path_items = g_strsplit_set(path, "/\n", -1);
parent = archive->root_entry;
- if(path_items[i]?strlen(path_items[i])==0:0)
+ if(path_items[i]?path_items[i][0]=='\0':0)
{
/* has leading / */
- tmp_entry = lxa_entry_get_child(parent, path_items[i]);
+ tmp_entry = lxa_entry_get_child(parent, "/");
if(!tmp_entry)
{
tmp_entry = g_new0(LXAEntry, 1);
Modified: xarchiver/branches/xarchiver-psybsd/src/archive_store.c
===================================================================
--- xarchiver/branches/xarchiver-psybsd/src/archive_store.c 2006-10-17 18:35:58 UTC (rev 23445)
+++ xarchiver/branches/xarchiver-psybsd/src/archive_store.c 2006-10-17 18:52:57 UTC (rev 23446)
@@ -51,6 +51,7 @@
/* signals */
enum {
XA_ARCHIVE_STORE_SIGNAL_PWD_CHANGED = 0,
+ XA_ARCHIVE_STORE_SIGNAL_NEW_ARCHIVE,
XA_ARCHIVE_STORE_SIGNAL_NUMBER
};
static gint xa_archive_store_signals[XA_ARCHIVE_STORE_SIGNAL_NUMBER];
@@ -239,7 +240,7 @@
G_PARAM_READWRITE);
g_object_class_install_property(object_class, XA_ARCHIVE_STORE_SORT_CASE_SENSITIVE, pspec);
- xa_archive_store_signals[XA_ARCHIVE_STORE_SIGNAL_PWD_CHANGED] = g_signal_new("xa_pwd_changed",
+ xa_archive_store_signals[XA_ARCHIVE_STORE_SIGNAL_PWD_CHANGED] = g_signal_new("xa-pwd-changed",
G_TYPE_FROM_CLASS(as_class),
G_SIGNAL_RUN_LAST | G_SIGNAL_ACTION,
0,
@@ -250,6 +251,17 @@
0,
NULL);
+ xa_archive_store_signals[XA_ARCHIVE_STORE_SIGNAL_NEW_ARCHIVE] = g_signal_new("xa-new-archive",
+ G_TYPE_FROM_CLASS(as_class),
+ G_SIGNAL_RUN_LAST | G_SIGNAL_ACTION,
+ 0,
+ NULL,
+ NULL,
+ g_cclosure_marshal_VOID__VOID,
+ G_TYPE_NONE,
+ 0,
+ NULL);
+
xa_archive_store_up_entry.filename = "..";
xa_archive_store_up_entry.props = NULL;
xa_archive_store_up_entry.children = NULL;
@@ -463,7 +475,7 @@
{
if(entry == &xa_archive_store_up_entry)
{
- g_value_set_string(value, "gtk-go-up");
+ g_value_set_string(value, GTK_STOCK_GO_UP);
}
else
{
@@ -1032,7 +1044,9 @@
/* TODO Signal file-activated */
if(strcmp(entry->mime_type, "inode/directory"))
{
+#ifdef DEBUG
g_debug("file clicked");
+#endif
return;
}
@@ -1119,6 +1133,7 @@
{
store->archive = NULL;
store->current_entry = NULL;
+ g_signal_emit(store, xa_archive_store_signals[XA_ARCHIVE_STORE_SIGNAL_NEW_ARCHIVE], 0,NULL);
return;
}
@@ -1146,6 +1161,7 @@
gtk_tree_path_free(path_);
}
+ g_signal_emit(store, xa_archive_store_signals[XA_ARCHIVE_STORE_SIGNAL_NEW_ARCHIVE], 0,NULL);
g_signal_emit(store, xa_archive_store_signals[XA_ARCHIVE_STORE_SIGNAL_PWD_CHANGED], 0,NULL);
}
@@ -1192,7 +1208,7 @@
}
}
- if(buf[0][0] == '/')
+ if(buf[0] != lastfile && buf[0][0] == '/')
{
buf[0] = "";
}
@@ -1243,7 +1259,7 @@
if(!store->archive)
return FALSE;
- gchar **buf = g_strsplit_set(path, "/\\\n", -1);
+ gchar **buf = g_strsplit_set(path, "/\n", -1);
gchar **iter = buf;
LXAEntry *entry = store->archive->root_entry;
GSList *stack = g_slist_prepend(NULL, entry);
Modified: xarchiver/branches/xarchiver-psybsd/src/main_window.c
===================================================================
--- xarchiver/branches/xarchiver-psybsd/src/main_window.c 2006-10-17 18:35:58 UTC (rev 23445)
+++ xarchiver/branches/xarchiver-psybsd/src/main_window.c 2006-10-17 18:52:57 UTC (rev 23446)
@@ -32,14 +32,14 @@
#include "archive_store.h"
#include "navigation_bar.h"
+#ifdef ENABLE_PATHBAR
+#include "path_bar.h"
+#endif /* ENABLE_PATHBAR */
+
#ifdef ENABLE_TOOLBAR
#include "tool_bar.h"
#endif /* ENABLE_TOOLBAR */
-#ifdef ENABLE_PATHBAR
-#include "path_bar.h"
-#endif /* ENABLE_PATHBAR */
-
#include "main_window.h"
#include "new_dialog.h"
#include "extract_dialog.h"
@@ -117,7 +117,7 @@
object_class->get_property = xa_main_window_get_property;
object_class->finalize = xa_main_window_finalize;
- pspec = g_param_spec_boolean("show_icons",
+ pspec = g_param_spec_boolean("show-icons",
_("Show icons"),
_("Show icons"),
FALSE,
@@ -129,20 +129,31 @@
xa_main_window_finalize(GObject *object)
{
XAMainWindow *window = XA_MAIN_WINDOW(object);
+
+ xa_archive_store_set_contents(XA_ARCHIVE_STORE(window->treemodel), NULL);
+
xa_settings_set_group(window->settings, "Global");
if(!window->navigationbar)
+ {
xa_settings_write_entry(window->settings, "NavigationBar", "None");
- else
+ }
+#ifdef ENABLE_TOOLBAR
+ else if(XA_IS_TOOL_BAR(window->navigationbar))
{
+ xa_settings_write_entry(window->settings, "NavigationBar", "ToolBar");
+ }
+#endif
#ifdef ENABLE_PATHBAR
- if(G_OBJECT_TYPE(window->navigationbar) == XA_TYPE_PATH_BAR)
- xa_settings_write_entry(window->settings, "NavigationBar", "PathBar");
+ else if(XA_IS_PATH_BAR(window->navigationbar))
+ {
+ xa_settings_write_entry(window->settings, "NavigationBar", "PathBar");
+ }
#endif
-#ifdef ENABLE_TOOLBAR
- if(G_OBJECT_TYPE(window->navigationbar) == XA_TYPE_TOOL_BAR)
- xa_settings_write_entry(window->settings, "NavigationBar", "ToolBar");
-#endif
+ else
+ {
+ xa_settings_write_entry(window->settings, "NavigationBar", "None");
}
+ gtk_widget_unref(GTK_WIDGET(window->navigationbar));
xa_settings_save(window->settings);
}
@@ -156,6 +167,7 @@
GtkWidget *tmp_image;
GtkAccelGroup *accel_group = gtk_accel_group_new();
const gchar *nav_bar;
+ gboolean up_dir = TRUE;
window->working_node = NULL;
window->parent_node = g_new0(GValue, 1);
@@ -186,25 +198,25 @@
gtk_menu_item_set_submenu(GTK_MENU_ITEM(window->menubar.menu_item_help), window->menubar.menu_help);
/* Archive menu */
- window->menubar.menu_item_new = gtk_image_menu_item_new_from_stock("gtk-new", accel_group);
+ window->menubar.menu_item_new = gtk_image_menu_item_new_from_stock(GTK_STOCK_NEW, accel_group);
gtk_container_add(GTK_CONTAINER(window->menubar.menu_archive), window->menubar.menu_item_new);
- window->menubar.menu_item_open = gtk_image_menu_item_new_from_stock("gtk-open", accel_group);
+ window->menubar.menu_item_open = gtk_image_menu_item_new_from_stock(GTK_STOCK_OPEN, accel_group);
gtk_container_add(GTK_CONTAINER(window->menubar.menu_archive), window->menubar.menu_item_open);
menu_separator = gtk_separator_menu_item_new();
gtk_container_add(GTK_CONTAINER(window->menubar.menu_archive), menu_separator);
- window->menubar.menu_item_properties = gtk_image_menu_item_new_from_stock("gtk-properties", accel_group);
+ window->menubar.menu_item_properties = gtk_image_menu_item_new_from_stock(GTK_STOCK_PROPERTIES, accel_group);
gtk_container_add(GTK_CONTAINER(window->menubar.menu_archive), window->menubar.menu_item_properties);
- window->menubar.menu_item_close = gtk_image_menu_item_new_from_stock("gtk-close", accel_group);
+ window->menubar.menu_item_close = gtk_image_menu_item_new_from_stock(GTK_STOCK_CLOSE, accel_group);
gtk_container_add(GTK_CONTAINER(window->menubar.menu_archive), window->menubar.menu_item_close);
menu_separator = gtk_separator_menu_item_new();
gtk_container_add(GTK_CONTAINER(window->menubar.menu_archive), menu_separator);
- window->menubar.menu_item_quit = gtk_image_menu_item_new_from_stock("gtk-quit", accel_group);
+ window->menubar.menu_item_quit = gtk_image_menu_item_new_from_stock(GTK_STOCK_QUIT, accel_group);
gtk_container_add(GTK_CONTAINER(window->menubar.menu_archive), window->menubar.menu_item_quit);
g_signal_connect(G_OBJECT(window->menubar.menu_item_new), "activate", G_CALLBACK(cb_xa_main_new_archive), window);
@@ -224,13 +236,13 @@
gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (window->menubar.menu_item_extract), tmp_image);
gtk_container_add(GTK_CONTAINER(window->menubar.menu_action), window->menubar.menu_item_extract);
- window->menubar.menu_item_remove = gtk_image_menu_item_new_from_stock("gtk-delete", accel_group);
+ window->menubar.menu_item_remove = gtk_image_menu_item_new_from_stock(GTK_STOCK_DELETE, accel_group);
gtk_container_add(GTK_CONTAINER(window->menubar.menu_action), window->menubar.menu_item_remove);
menu_separator = gtk_separator_menu_item_new();
gtk_container_add(GTK_CONTAINER(window->menubar.menu_action), menu_separator);
- window->menubar.menu_item_settings = gtk_image_menu_item_new_from_stock("gtk-preferences", accel_group);
+ window->menubar.menu_item_settings = gtk_image_menu_item_new_from_stock(GTK_STOCK_PREFERENCES, accel_group);
gtk_container_add(GTK_CONTAINER(window->menubar.menu_action), window->menubar.menu_item_settings);
g_signal_connect(G_OBJECT(window->menubar.menu_item_add), "activate", G_CALLBACK(cb_xa_main_add_to_archive), window);
@@ -243,12 +255,12 @@
gtk_widget_set_sensitive(GTK_WIDGET(window->menubar.menu_item_close), FALSE);
/* Help menu */
- window->menubar.menu_item_about = gtk_image_menu_item_new_from_stock("gtk-about", accel_group);
+ window->menubar.menu_item_about = gtk_image_menu_item_new_from_stock(GTK_STOCK_ABOUT, accel_group);
gtk_container_add(GTK_CONTAINER(window->menubar.menu_help), window->menubar.menu_item_about);
/* Archive pane */
- window->toolbar.tool_item_new = gtk_tool_button_new_from_stock("gtk-new");
- window->toolbar.tool_item_open = gtk_tool_button_new_from_stock("gtk-open");
+ window->toolbar.tool_item_new = gtk_tool_button_new_from_stock(GTK_STOCK_NEW);
+ window->toolbar.tool_item_open = gtk_tool_button_new_from_stock(GTK_STOCK_OPEN);
tool_separator = gtk_separator_tool_item_new ();
gtk_container_add(GTK_CONTAINER(toolbar), GTK_WIDGET(window->toolbar.tool_item_new));
@@ -267,7 +279,7 @@
window->toolbar.tool_item_extract = gtk_tool_button_new(tmp_image, _("Extract"));
gtk_widget_set_sensitive(GTK_WIDGET(window->toolbar.tool_item_extract), FALSE);
- window->toolbar.tool_item_remove = gtk_tool_button_new_from_stock("gtk-delete");
+ window->toolbar.tool_item_remove = gtk_tool_button_new_from_stock(GTK_STOCK_DELETE);
gtk_widget_set_sensitive(GTK_WIDGET(window->toolbar.tool_item_remove), FALSE);
tool_separator = gtk_separator_tool_item_new ();
@@ -282,7 +294,7 @@
/* control pane */
- window->toolbar.tool_item_stop = gtk_tool_button_new_from_stock("gtk-stop");
+ window->toolbar.tool_item_stop = gtk_tool_button_new_from_stock(GTK_STOCK_STOP);
gtk_widget_set_sensitive(GTK_WIDGET(window->toolbar.tool_item_stop), FALSE);
gtk_container_add(GTK_CONTAINER(toolbar), GTK_WIDGET(window->toolbar.tool_item_stop));
@@ -292,26 +304,36 @@
xa_settings_set_group(window->settings, "Global");
nav_bar = xa_settings_read_entry(window->settings, "NavigationBar", "PathBar");
window->navigationbar = NULL;
+
#ifdef ENABLE_TOOLBAR
if(!strcmp(nav_bar, "ToolBar"))
+ {
window->navigationbar = xa_tool_bar_new(NULL);
+ up_dir = FALSE;
+ }
#endif
#ifdef ENABLE_PATHBAR
if(!strcmp(nav_bar, "PathBar"))
+ {
window->navigationbar = xa_path_bar_new(NULL);
+ gtk_container_set_border_width(GTK_CONTAINER(window->navigationbar), 3);
+ up_dir = FALSE;
+ }
#endif
- if(window->navigationbar)
+ if(!window->navigationbar)
{
- gtk_container_set_border_width(GTK_CONTAINER(window->navigationbar), 3);
+ window->navigationbar = xa_navigation_bar_new(NULL);
}
+ gtk_widget_ref(GTK_WIDGET(window->navigationbar));
+
/* main view */
window->scrollwindow = gtk_scrolled_window_new(NULL, NULL);
gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(window->scrollwindow), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
window->treeview = gtk_tree_view_new();
- gtk_tree_view_set_rules_hint(window->treeview, TRUE);
+ /* gtk_tree_view_set_rules_hint(window->treeview, TRUE); */
gtk_tree_view_set_enable_search(GTK_TREE_VIEW(window->treeview), TRUE);
GtkTreeSelection *selection = gtk_tree_view_get_selection ( GTK_TREE_VIEW (window->treeview) );
@@ -342,12 +364,11 @@
gtk_container_add(GTK_CONTAINER(window), main_vbox);
/* archive model */
- if(window->navigationbar)
- window->treemodel = xa_archive_store_new(NULL, TRUE, FALSE, window->icon_theme);
- else
- window->treemodel = xa_archive_store_new(NULL, TRUE, TRUE, window->icon_theme);
+ window->treemodel = xa_archive_store_new(NULL, TRUE, up_dir, window->icon_theme);
+
xa_archive_store_connect_treeview(XA_ARCHIVE_STORE(window->treemodel), GTK_TREE_VIEW(window->treeview));
gtk_tree_view_set_model(GTK_TREE_VIEW(window->treeview), GTK_TREE_MODEL(window->treemodel));
+
if(window->navigationbar)
xa_navigation_bar_set_store(window->navigationbar, XA_ARCHIVE_STORE(window->treemodel));
}
@@ -522,8 +543,6 @@
open_archive_path = gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(dialog));
if(window->lp_xa_archive)
{
- if(window->navigationbar)
- xa_navigation_bar_clear_history(window->navigationbar);
xa_archive_store_set_contents(XA_ARCHIVE_STORE(window->treemodel), NULL);
g_object_unref(window->lp_xa_archive);
window->lp_xa_archive = NULL;
@@ -610,8 +629,6 @@
GtkTreeModel *liststore = window->treemodel;
GList *columns = gtk_tree_view_get_columns(GTK_TREE_VIEW(window->treeview));
- if(window->navigationbar)
- xa_navigation_bar_clear_history(window->navigationbar);
xa_archive_store_set_contents(XA_ARCHIVE_STORE(liststore), NULL);
/* xa_archive_tree_store_set_contents(XA_ARCHIVE_TREE_STORE(liststore), NULL); */
Modified: xarchiver/branches/xarchiver-psybsd/src/navigation_bar.c
===================================================================
--- xarchiver/branches/xarchiver-psybsd/src/navigation_bar.c 2006-10-17 18:35:58 UTC (rev 23445)
+++ xarchiver/branches/xarchiver-psybsd/src/navigation_bar.c 2006-10-17 18:52:57 UTC (rev 23446)
@@ -39,6 +39,9 @@
cb_xa_navigation_bar_pwd_changed(XAArchiveStore *store, XANavigationBar *bar);
static void
+cb_xa_navigation_bar_new_archive(XAArchiveStore *store, XANavigationBar *bar);
+
+static void
xa_navigation_bar_set_property(GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec);
static void
xa_navigation_bar_get_property(GObject *object, guint prop_id, GValue *value, GParamSpec *pspec);
@@ -96,7 +99,11 @@
static void
xa_navigation_bar_init(XANavigationBar *navigation_bar)
{
+ GTK_WIDGET_SET_FLAGS(navigation_bar, GTK_NO_WINDOW);
+ gtk_widget_set_redraw_on_allocate(GTK_WIDGET(navigation_bar), FALSE);
+
navigation_bar->_cb_pwd_changed = (GCallback)cb_xa_navigation_bar_pwd_changed;
+ navigation_bar->_cb_new_archive = (GCallback)cb_xa_navigation_bar_new_archive;
navigation_bar->max_history = XA_NAVIGATION_BAR_MAX_HISTORY;
navigation_bar->pwd = NULL;
navigation_bar->history = NULL;
@@ -113,10 +120,13 @@
navigation_bar->store = store;
if(store)
- g_signal_connect(G_OBJECT(store), "xa_pwd_changed", (GCallback)navigation_bar->_cb_pwd_changed, navigation_bar);
+ {
+ g_signal_connect(G_OBJECT(store), "xa-pwd-changed", (GCallback)navigation_bar->_cb_pwd_changed, navigation_bar);
+ g_signal_connect(G_OBJECT(store), "xa-new-archive", (GCallback)navigation_bar->_cb_new_archive, navigation_bar);
+ }
}
-GtkWidget *
+XANavigationBar *
xa_navigation_bar_new(XAArchiveStore *store)
{
XANavigationBar *bar;
@@ -126,7 +136,7 @@
if(store)
xa_navigation_bar_set_store(bar, store);
- return GTK_WIDGET(bar);
+ return bar;
}
static void
@@ -137,6 +147,12 @@
g_free(path);
}
+static void
+cb_xa_navigation_bar_new_archive(XAArchiveStore *store, XANavigationBar *bar)
+{
+ xa_navigation_bar_clear_history(bar);
+}
+
void
xa_navigation_bar_history_push(XANavigationBar *nav_bar, const gchar *path)
{
Modified: xarchiver/branches/xarchiver-psybsd/src/navigation_bar.h
===================================================================
--- xarchiver/branches/xarchiver-psybsd/src/navigation_bar.h 2006-10-17 18:35:58 UTC (rev 23445)
+++ xarchiver/branches/xarchiver-psybsd/src/navigation_bar.h 2006-10-17 18:52:57 UTC (rev 23446)
@@ -50,6 +50,7 @@
GList *pwd;
gint max_history;
GCallback _cb_pwd_changed;
+ GCallback _cb_new_archive;
};
typedef struct _XANavigationBarClass XANavigationBarClass;
@@ -60,7 +61,7 @@
};
GType xa_navigation_bar_get_type();
-GtkWidget *xa_navigation_bar_new();
+XANavigationBar *xa_navigation_bar_new();
void xa_navigation_bar_history_push(XANavigationBar *nav_bar, const gchar *path);
void xa_navigation_bar_set_store(XANavigationBar *navigation_bar, XAArchiveStore *store);
gint xa_navigation_bar_history_get_length(XANavigationBar *nav_bar);
Modified: xarchiver/branches/xarchiver-psybsd/src/path_bar.c
===================================================================
--- xarchiver/branches/xarchiver-psybsd/src/path_bar.c 2006-10-17 18:35:58 UTC (rev 23445)
+++ xarchiver/branches/xarchiver-psybsd/src/path_bar.c 2006-10-17 18:52:57 UTC (rev 23446)
@@ -15,6 +15,9 @@
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
+/*
+ * Based on code written by Benedikt Meurer <benny at xfce.org>
+ */
#include <config.h>
#include <string.h>
@@ -26,6 +29,9 @@
#include "navigation_bar.h"
#include "path_bar.h"
+#ifndef XA_PATH_BAR_SCROLL_TIMEOUT
+#define XA_PATH_BAR_SCROLL_TIMEOUT 200
+#endif
static void
xa_path_bar_class_init(XAPathBarClass *archive_class);
@@ -49,14 +55,33 @@
static void
cb_xa_path_bar_pwd_changed(XAArchiveStore *store, XAPathBar *bar);
+static void
+cb_xa_path_bar_new_archive(XAArchiveStore *store, XAPathBar *bar);
static void
cb_xa_path_bar_path_button_clicked(GtkRadioButton *button, XAPathBar *path_bar);
+
static void
-cb_xa_path_bar_scroll_left(GtkWidget *widget, gpointer user_data);
+cb_xa_path_bar_scroll_timeout_destroy(gpointer user_data);
+
+static gboolean
+cb_xa_path_bar_scroll_left_timeout(gpointer user_data);
+static gboolean
+cb_xa_path_bar_left_button_pressed(GtkWidget *widget, GdkEventButton *event, gpointer user_data);
+static gboolean
+cb_xa_path_bar_left_button_released(GtkWidget *widget, GdkEventButton *event, gpointer user_data);
static void
-cb_xa_path_bar_scroll_right(GtkWidget *widget, gpointer user_data);
+cb_xa_path_bar_left_button_clicked(GtkWidget *button, gpointer user_data);
+static gboolean
+cb_xa_path_bar_scroll_right_timeout(gpointer user_data);
+static gboolean
+cb_xa_path_bar_right_button_pressed(GtkWidget *widget, GdkEventButton *event, gpointer user_data);
+static gboolean
+cb_xa_path_bar_right_button_released(GtkWidget *widget, GdkEventButton *event, gpointer user_data);
+static void
+cb_xa_path_bar_right_button_clicked(GtkWidget *button, gpointer user_data);
+
GType
xa_path_bar_get_type ()
{
@@ -113,12 +138,15 @@
{
GtkWidget *arrow;
XA_NAVIGATION_BAR(path_bar)->_cb_pwd_changed = (GCallback)cb_xa_path_bar_pwd_changed;
+ XA_NAVIGATION_BAR(path_bar)->_cb_new_archive = (GCallback)cb_xa_path_bar_new_archive;
GTK_WIDGET_SET_FLAGS(path_bar, GTK_NO_WINDOW);
gtk_widget_set_redraw_on_allocate(GTK_WIDGET(path_bar), FALSE);
path_bar->left_button = GTK_BUTTON(gtk_button_new());
- g_signal_connect(G_OBJECT(path_bar->left_button), "clicked", G_CALLBACK(cb_xa_path_bar_scroll_left), path_bar);
+/* g_signal_connect(G_OBJECT(path_bar->left_button), "button-press-event", G_CALLBACK(cb_xa_path_bar_left_button_pressed), path_bar);
+ g_signal_connect(G_OBJECT(path_bar->left_button), "button-release-event", G_CALLBACK(cb_xa_path_bar_left_button_released), path_bar);*/
+ g_signal_connect(G_OBJECT(path_bar->left_button), "clicked", G_CALLBACK(cb_xa_path_bar_left_button_clicked), path_bar);
gtk_container_add(GTK_CONTAINER(path_bar), GTK_WIDGET(path_bar->left_button));
gtk_widget_show(GTK_WIDGET(path_bar->left_button));
gtk_widget_ref(GTK_WIDGET(path_bar->left_button));
@@ -128,7 +156,9 @@
gtk_widget_show (arrow);
path_bar->right_button = GTK_BUTTON(gtk_button_new());
- g_signal_connect(G_OBJECT(path_bar->right_button), "clicked", G_CALLBACK(cb_xa_path_bar_scroll_right), path_bar);
+/* g_signal_connect(G_OBJECT(path_bar->right_button), "button-press-event", G_CALLBACK(cb_xa_path_bar_right_button_pressed), path_bar);
+ g_signal_connect(G_OBJECT(path_bar->right_button), "button-release-event", G_CALLBACK(cb_xa_path_bar_right_button_released), path_bar);*/
+ g_signal_connect(G_OBJECT(path_bar->right_button), "clicked", G_CALLBACK(cb_xa_path_bar_right_button_clicked), path_bar);
gtk_container_add(GTK_CONTAINER(path_bar), GTK_WIDGET(path_bar->right_button));
gtk_widget_show(GTK_WIDGET(path_bar->right_button));
gtk_widget_ref(GTK_WIDGET(path_bar->right_button));
@@ -141,12 +171,17 @@
gtk_container_add(GTK_CONTAINER(path_bar), GTK_WIDGET(path_bar->home_button));
g_signal_connect(G_OBJECT(path_bar->home_button), "clicked", (GCallback)cb_xa_path_bar_path_button_clicked, path_bar);
gtk_toggle_button_set_mode(GTK_TOGGLE_BUTTON(path_bar->home_button), FALSE);
+ gtk_widget_set_sensitive(GTK_WIDGET(path_bar->home_button), FALSE);
gtk_widget_show(GTK_WIDGET(path_bar->home_button));
gtk_widget_ref(GTK_WIDGET(path_bar->home_button));
+ arrow = gtk_image_new_from_stock(GTK_STOCK_HOME, GTK_ICON_SIZE_MENU);
+ gtk_container_add (GTK_CONTAINER (path_bar->home_button), arrow);
+ gtk_widget_show (arrow);
path_bar->path_button = g_slist_prepend(NULL, path_bar->home_button);
path_bar->first_button = NULL;
+ path_bar->scroll_timeout = 0;
gtk_widget_ref(GTK_WIDGET(path_bar));
}
@@ -412,12 +447,31 @@
}
static void
+cb_xa_path_bar_new_archive(XAArchiveStore *store, XAPathBar *path_bar)
+{
+ GSList *buttons = path_bar->path_button->next;
+
+ gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(path_bar->path_button->data), TRUE);
+
+ while(buttons)
+ {
+ gtk_container_remove(GTK_CONTAINER(path_bar), GTK_WIDGET(buttons->data));
+ gtk_widget_unref(GTK_WIDGET(buttons->data));
+ buttons = buttons->next;
+ }
+ g_slist_free(path_bar->path_button->next);
+ path_bar->path_button->next = NULL;
+
+ gtk_widget_set_sensitive(GTK_WIDGET(path_bar->home_button), store->archive?TRUE:FALSE);
+}
+
+static void
cb_xa_path_bar_pwd_changed(XAArchiveStore *store, XAPathBar *path_bar)
{
GSList *path = xa_archive_store_get_pwd_list(store);
GSList *iter = path;
GSList *buttons = path_bar->path_button->next;
- GSList *lastbutton = NULL;
+ GSList *lastbutton = path_bar->path_button;
GtkRadioButton *button = GTK_RADIO_BUTTON(path_bar->home_button);
const gchar *label = xa_archive_store_get_pwd(store);
gint cmp = 0;
@@ -510,10 +564,18 @@
}
static void
-cb_xa_path_bar_scroll_left(GtkWidget *widget, gpointer user_data)
+cb_xa_path_bar_scroll_timeout_destroy(gpointer user_data)
{
XAPathBar *path_bar = XA_PATH_BAR(user_data);
+ path_bar->scroll_timeout = 0;
+}
+
+static gboolean
+cb_xa_path_bar_scroll_left_timeout(gpointer user_data)
+{
+ XAPathBar *path_bar = XA_PATH_BAR(user_data);
+
GSList *iter = path_bar->path_button;
GSList *prev = NULL;
@@ -528,11 +590,46 @@
prev = iter;
iter = iter->next;
}
+
+ return FALSE;
}
+static gboolean
+cb_xa_path_bar_left_button_pressed(GtkWidget *widget, GdkEventButton *event, gpointer user_data)
+{
+ XAPathBar *path_bar = XA_PATH_BAR(user_data);
+
+ if(event->type != GDK_BUTTON_PRESS || event->button != 1)
+ return FALSE;
+
+ path_bar->scroll_timeout = g_timeout_add_full(G_PRIORITY_LOW, XA_PATH_BAR_SCROLL_TIMEOUT, cb_xa_path_bar_scroll_left_timeout, user_data, cb_xa_path_bar_scroll_timeout_destroy);
+
+ return FALSE;
+}
+
+static gboolean
+cb_xa_path_bar_left_button_released(GtkWidget *widget, GdkEventButton *event, gpointer user_data)
+{
+ XAPathBar *path_bar = XA_PATH_BAR(user_data);
+
+ if(event->type != GDK_BUTTON_RELEASE || event->button != 1)
+ return FALSE;
+
+ if(path_bar->scroll_timeout)
+ g_source_remove(path_bar->scroll_timeout);
+
+ return FALSE;
+}
+
static void
-cb_xa_path_bar_scroll_right(GtkWidget *widget, gpointer user_data)
+cb_xa_path_bar_left_button_clicked(GtkWidget *widget, gpointer user_data)
{
+ cb_xa_path_bar_scroll_left_timeout(user_data);
+}
+
+static gboolean
+cb_xa_path_bar_scroll_right_timeout(gpointer user_data)
+{
XAPathBar *path_bar = XA_PATH_BAR(user_data);
if(!path_bar->first_button)
@@ -542,3 +639,36 @@
path_bar->first_button = path_bar->first_button->next;
}
+static gboolean
+cb_xa_path_bar_right_button_pressed(GtkWidget *widget, GdkEventButton *event, gpointer user_data)
+{
+ XAPathBar *path_bar = XA_PATH_BAR(user_data);
+
+ if(event->type != GDK_BUTTON_PRESS || event->button != 1)
+ return FALSE;
+
+ path_bar->scroll_timeout = g_timeout_add_full(G_PRIORITY_LOW, XA_PATH_BAR_SCROLL_TIMEOUT, cb_xa_path_bar_scroll_right_timeout, user_data, cb_xa_path_bar_scroll_timeout_destroy);
+
+ return FALSE;
+}
+
+static gboolean
+cb_xa_path_bar_right_button_released(GtkWidget *widget, GdkEventButton *event, gpointer user_data)
+{
+ XAPathBar *path_bar = XA_PATH_BAR(user_data);
+
+ if(event->type != GDK_BUTTON_RELEASE || event->button != 1)
+ return FALSE;
+
+ if(path_bar->scroll_timeout)
+ g_source_remove(path_bar->scroll_timeout);
+
+ return FALSE;
+}
+
+static void
+cb_xa_path_bar_right_button_clicked(GtkWidget *widget, gpointer user_data)
+{
+ cb_xa_path_bar_scroll_right_timeout(user_data);
+}
+
Modified: xarchiver/branches/xarchiver-psybsd/src/path_bar.h
===================================================================
--- xarchiver/branches/xarchiver-psybsd/src/path_bar.h 2006-10-17 18:35:58 UTC (rev 23445)
+++ xarchiver/branches/xarchiver-psybsd/src/path_bar.h 2006-10-17 18:52:57 UTC (rev 23446)
@@ -50,6 +50,7 @@
GtkButton *home_button;
GSList *path_button;
GSList *first_button;
+ guint scroll_timeout;
};
typedef struct _XAPathBarClass XAPathBarClass;
Modified: xarchiver/branches/xarchiver-psybsd/src/tool_bar.c
===================================================================
--- xarchiver/branches/xarchiver-psybsd/src/tool_bar.c 2006-10-17 18:35:58 UTC (rev 23445)
+++ xarchiver/branches/xarchiver-psybsd/src/tool_bar.c 2006-10-17 18:52:57 UTC (rev 23446)
@@ -121,22 +121,22 @@
gtk_container_add(GTK_CONTAINER(tool_bar), GTK_WIDGET(tool_bar->bar));
gtk_widget_show(GTK_WIDGET(tool_bar->bar));
- tool_bar->back_button = gtk_tool_button_new_from_stock("gtk-go-back");
+ tool_bar->back_button = gtk_tool_button_new_from_stock(GTK_STOCK_GO_BACK);
gtk_toolbar_insert(GTK_TOOLBAR(tool_bar->bar), tool_bar->back_button, 0);
g_signal_connect(G_OBJECT(tool_bar->back_button), "clicked", (GCallback)cb_xa_tool_bar_history_back, tool_bar);
gtk_widget_set_sensitive(GTK_WIDGET(tool_bar->back_button), 0);
- tool_bar->forward_button = gtk_tool_button_new_from_stock("gtk-go-forward");
+ tool_bar->forward_button = gtk_tool_button_new_from_stock(GTK_STOCK_GO_FORWARD);
gtk_toolbar_insert(GTK_TOOLBAR(tool_bar->bar), tool_bar->forward_button, 1);
g_signal_connect(G_OBJECT(tool_bar->forward_button), "clicked", (GCallback)cb_xa_tool_bar_history_forward, tool_bar);
gtk_widget_set_sensitive(GTK_WIDGET(tool_bar->forward_button), 0);
- tool_bar->up_button = gtk_tool_button_new_from_stock("gtk-go-up");
+ tool_bar->up_button = gtk_tool_button_new_from_stock(GTK_STOCK_GO_UP);
gtk_toolbar_insert(GTK_TOOLBAR(tool_bar->bar), tool_bar->up_button, 2);
g_signal_connect(G_OBJECT(tool_bar->up_button), "clicked", (GCallback)cb_xa_tool_bar_up, tool_bar);
gtk_widget_set_sensitive(GTK_WIDGET(tool_bar->up_button), 0);
- tool_bar->home_button = gtk_tool_button_new_from_stock("gtk-home");
+ tool_bar->home_button = gtk_tool_button_new_from_stock(GTK_STOCK_HOME);
gtk_toolbar_insert(GTK_TOOLBAR(tool_bar->bar), tool_bar->home_button, 3);
g_signal_connect(G_OBJECT(tool_bar->home_button), "clicked", (GCallback)cb_xa_tool_bar_home, tool_bar);
gtk_widget_set_sensitive(GTK_WIDGET(tool_bar->home_button), 0);
Modified: xarchiver/branches/xarchiver-psybsd/src/tool_bar.h
===================================================================
--- xarchiver/branches/xarchiver-psybsd/src/tool_bar.h 2006-10-17 18:35:58 UTC (rev 23445)
+++ xarchiver/branches/xarchiver-psybsd/src/tool_bar.h 2006-10-17 18:52:57 UTC (rev 23446)
@@ -61,7 +61,7 @@
XANavigationBarClass parent_class;
};
-GType xa_tool_bar_get_type();
+GType xa_tool_bar_get_type();
XANavigationBar *xa_tool_bar_new();
G_END_DECLS
More information about the Xfce4-commits
mailing list