[Xfce4-commits] r23395 - xarchiver/branches/xarchiver-psybsd/src
Stephan Arts
stephan at xfce.org
Fri Oct 13 10:20:33 UTC 2006
Author: stephan
Date: 2006-10-13 10:20:32 +0000 (Fri, 13 Oct 2006)
New Revision: 23395
Modified:
xarchiver/branches/xarchiver-psybsd/src/navigation_bar.c
xarchiver/branches/xarchiver-psybsd/src/navigation_bar.h
xarchiver/branches/xarchiver-psybsd/src/tool_bar.c
xarchiver/branches/xarchiver-psybsd/src/tool_bar.h
Log:
Changed toolbar (patch from Peter de Ridder <pc.zonnet.nl>)
Modified: xarchiver/branches/xarchiver-psybsd/src/navigation_bar.c
===================================================================
--- xarchiver/branches/xarchiver-psybsd/src/navigation_bar.c 2006-10-13 09:51:33 UTC (rev 23394)
+++ xarchiver/branches/xarchiver-psybsd/src/navigation_bar.c 2006-10-13 10:20:32 UTC (rev 23395)
@@ -65,7 +65,7 @@
NULL
};
- xa_navigation_bar_type = g_type_register_static (GTK_TYPE_TOOLBAR, "XANavigationBar", &xa_navigation_bar_info, 0);
+ xa_navigation_bar_type = g_type_register_static (GTK_TYPE_CONTAINER, "XANavigationBar", &xa_navigation_bar_info, 0);
}
return xa_navigation_bar_type;
}
Modified: xarchiver/branches/xarchiver-psybsd/src/navigation_bar.h
===================================================================
--- xarchiver/branches/xarchiver-psybsd/src/navigation_bar.h 2006-10-13 09:51:33 UTC (rev 23394)
+++ xarchiver/branches/xarchiver-psybsd/src/navigation_bar.h 2006-10-13 10:20:32 UTC (rev 23395)
@@ -44,7 +44,7 @@
struct _XANavigationBar
{
- GtkToolbar parent;
+ GtkContainer parent;
XAArchiveStore *store;
GList *history;
GList *pwd;
Modified: xarchiver/branches/xarchiver-psybsd/src/tool_bar.c
===================================================================
--- xarchiver/branches/xarchiver-psybsd/src/tool_bar.c 2006-10-13 09:51:33 UTC (rev 23394)
+++ xarchiver/branches/xarchiver-psybsd/src/tool_bar.c 2006-10-13 10:20:32 UTC (rev 23395)
@@ -34,6 +34,20 @@
xa_tool_bar_init(XAToolBar *archive);
static void
+xa_tool_bar_size_request(GtkWidget *widget, GtkRequisition *requisition);
+static void
+xa_tool_bar_size_allocate(GtkWidget *widget, GtkAllocation *allocation);
+
+static GType
+xa_tool_bar_child_type(GtkContainer *container);
+static void
+xa_tool_bar_add(GtkContainer *container, GtkWidget *child);
+static void
+xa_tool_bar_remove(GtkContainer *container, GtkWidget *child);
+static void
+xa_tool_bar_forall(GtkContainer *container, gboolean include_internals, GtkCallback callback, gpointer callback_data);
+
+static void
cb_xa_tool_bar_pwd_changed(XAArchiveStore *store, XAToolBar *bar);
static void
@@ -78,6 +92,19 @@
static void
xa_tool_bar_class_init(XAToolBarClass *tool_bar_class)
{
+ GtkWidgetClass *widget_class;
+ GtkContainerClass *container_class;
+
+ widget_class = (GtkWidgetClass*)tool_bar_class;
+ container_class = (GtkContainerClass*)tool_bar_class;
+
+ widget_class->size_request = xa_tool_bar_size_request;
+ widget_class->size_allocate = xa_tool_bar_size_allocate;
+
+ container_class->add = xa_tool_bar_add;
+ container_class->remove = xa_tool_bar_remove;
+ container_class->forall = xa_tool_bar_forall;
+ container_class->child_type = xa_tool_bar_child_type;
}
static void
@@ -85,30 +112,37 @@
{
GtkToolItem *button = NULL;
XA_NAVIGATION_BAR(tool_bar)->_cb_pwd_changed = (GCallback)cb_xa_tool_bar_pwd_changed;
- gtk_toolbar_set_style(GTK_TOOLBAR(tool_bar), GTK_TOOLBAR_ICONS);
+ GTK_WIDGET_SET_FLAGS(tool_bar, GTK_NO_WINDOW);
+ gtk_widget_set_redraw_on_allocate(GTK_WIDGET(tool_bar), FALSE);
+
+ tool_bar->bar = GTK_TOOLBAR(gtk_toolbar_new());
+ gtk_toolbar_set_style(GTK_TOOLBAR(tool_bar->bar), GTK_TOOLBAR_ICONS);
+ 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");
- gtk_toolbar_insert(GTK_TOOLBAR(tool_bar), tool_bar->back_button, 0);
+ 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");
- gtk_toolbar_insert(GTK_TOOLBAR(tool_bar), tool_bar->forward_button, 1);
+ 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");
- gtk_toolbar_insert(GTK_TOOLBAR(tool_bar), tool_bar->up_button, 2);
+ 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");
- gtk_toolbar_insert(GTK_TOOLBAR(tool_bar), tool_bar->home_button, 3);
+ 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);
button = gtk_separator_tool_item_new();
- gtk_toolbar_insert(GTK_TOOLBAR(tool_bar), button, 4);
+ gtk_toolbar_insert(GTK_TOOLBAR(tool_bar->bar), button, 4);
button = gtk_tool_item_new();
tool_bar->path_field = gtk_entry_new();
@@ -122,11 +156,12 @@
gtk_tool_item_set_visible_horizontal(button, TRUE);
gtk_tool_item_set_homogeneous(button, FALSE);
- gtk_toolbar_insert(GTK_TOOLBAR(tool_bar), button, 5);
+ gtk_toolbar_insert(GTK_TOOLBAR(tool_bar->bar), button, 5);
gtk_widget_show_all(GTK_WIDGET(button));
gtk_widget_show(GTK_WIDGET(tool_bar->path_field));
gtk_widget_set_sensitive(GTK_WIDGET(tool_bar->path_field), 0);
+ gtk_widget_show_all(GTK_WIDGET(tool_bar->bar));
}
XANavigationBar *
@@ -177,6 +212,78 @@
}
static void
+xa_tool_bar_size_request(GtkWidget *widget, GtkRequisition *requisition)
+{
+ XAToolBar *tool_bar = XA_TOOL_BAR(widget);
+
+ if(tool_bar->bar && GTK_WIDGET_VISIBLE(tool_bar->bar))
+ gtk_widget_size_request(GTK_WIDGET(tool_bar->bar), requisition);
+}
+
+static void
+xa_tool_bar_size_allocate(GtkWidget *widget, GtkAllocation *allocation)
+{
+ XAToolBar *tool_bar = XA_TOOL_BAR(widget);
+
+ if(tool_bar->bar && GTK_WIDGET_VISIBLE(tool_bar->bar))
+ gtk_widget_size_allocate(GTK_WIDGET(tool_bar->bar), allocation);
+}
+
+static GType
+xa_tool_bar_child_type(GtkContainer *container)
+{
+ if(!XA_TOOL_BAR(container)->bar)
+ return GTK_TYPE_WIDGET;
+ else
+ return G_TYPE_NONE;
+}
+
+static void
+xa_tool_bar_add(GtkContainer *container, GtkWidget *child)
+{
+ XAToolBar *tool_bar = XA_TOOL_BAR(container);
+
+ g_return_if_fail(GTK_IS_WIDGET(child));
+
+ if(((GtkWidget*)tool_bar->bar) != child)
+ {
+ g_warning("DON'T set another child as toolbar");
+ return;
+ }
+
+ gtk_widget_set_parent(child, GTK_WIDGET(tool_bar));
+}
+
+static void
+xa_tool_bar_remove(GtkContainer *container, GtkWidget *child)
+{
+ XAToolBar *tool_bar = XA_TOOL_BAR(container);
+ gboolean widget_was_visible;
+
+ g_return_if_fail(GTK_IS_WIDGET(child));
+ g_return_if_fail(((GtkWidget*)tool_bar->bar) == child);
+
+ widget_was_visible = GTK_WIDGET_VISIBLE(child);
+
+ gtk_widget_unparent(child);
+ tool_bar->bar = NULL;
+
+ if(widget_was_visible)
+ gtk_widget_queue_resize(GTK_WIDGET(container));
+}
+
+static void
+xa_tool_bar_forall(GtkContainer *container, gboolean include_internals, GtkCallback callback, gpointer callback_data)
+{
+ XAToolBar *tool_bar = XA_TOOL_BAR(container);
+
+ g_return_if_fail(callback != NULL);
+
+ if(tool_bar->bar)
+ (* callback)(GTK_WIDGET(tool_bar->bar), callback_data);
+}
+
+static void
cb_xa_tool_bar_pwd_changed(XAArchiveStore *store, XAToolBar *tool_bar)
{
gchar *path= xa_archive_store_get_pwd(store);
Modified: xarchiver/branches/xarchiver-psybsd/src/tool_bar.h
===================================================================
--- xarchiver/branches/xarchiver-psybsd/src/tool_bar.h 2006-10-13 09:51:33 UTC (rev 23394)
+++ xarchiver/branches/xarchiver-psybsd/src/tool_bar.h 2006-10-13 10:20:32 UTC (rev 23395)
@@ -45,6 +45,7 @@
struct _XAToolBar
{
XANavigationBar parent;
+ GtkToolbar *bar;
GtkToolItem *back_button;
GtkToolItem *forward_button;
GtkToolItem *up_button;
More information about the Xfce4-commits
mailing list