[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