Commit 68aacef7 authored by John Sullivan's avatar John Sullivan

Finished task 598 (Command button layout should account

	for window height)

	* libnautilus-extensions/nautilus-keep-last-vertical-box.h,
	* libnautilus-extensions/nautilus-keep-last-vertical-box.c:
	New files, subclass of GtkVBox that truncates contents to
	fit, except last item which is always kept. (GtkVBox in the
	same situation just merrily places its child widgets outside
	of its allocation.)
	* libnautilus-extensions/Makefile.am: Build the new files.

	* src/ntl-index-panel.c:
	(make_button_box): Use NautilusKeepLastVerticalBox so only
	as many command buttons appear as fit, and the "Open with ..."
	button always appears; also embed this box in a GtkHBox to
	get horizontal sizing the way we want it.
	(add_command_buttons): Add (not yet active) "Open with ..."
	button.
	(nautilus_index_panel_update_buttons): Throw away the
	GtkHBox containing the button box instead of the button
	box itself.
parent 0852d9c7
2000-05-18 John Sullivan <sullivan@eazel.com>
Finished task 598 (Command button layout should account
for window height)
* libnautilus-extensions/nautilus-keep-last-vertical-box.h,
* libnautilus-extensions/nautilus-keep-last-vertical-box.c:
New files, subclass of GtkVBox that truncates contents to
fit, except last item which is always kept. (GtkVBox in the
same situation just merrily places its child widgets outside
of its allocation.)
* libnautilus-extensions/Makefile.am: Build the new files.
* src/ntl-index-panel.c:
(make_button_box): Use NautilusKeepLastVerticalBox so only
as many command buttons appear as fit, and the "Open with ..."
button always appears; also embed this box in a GtkHBox to
get horizontal sizing the way we want it.
(add_command_buttons): Add (not yet active) "Open with ..."
button.
(nautilus_index_panel_update_buttons): Throw away the
GtkHBox containing the button box instead of the button
box itself.
2000-05-18 Andy Hertzfeld <andy@eazel.com>
* components/music/nautilus-music-view.c: (extract_initial_number),
......
......@@ -55,6 +55,7 @@ libnautilus_extensionsinclude_HEADERS= \
nautilus-icon-container.h \
nautilus-icon-factory.h \
nautilus-icon-text-item.h \
nautilus-keep-last-vertical-box.h \
nautilus-link.h \
nautilus-list-column-title.h \
nautilus-list.h \
......@@ -103,6 +104,7 @@ libnautilus_extensions_la_SOURCES = \
nautilus-icon-factory.c \
nautilus-icon-grid.c \
nautilus-icon-text-item.c \
nautilus-keep-last-vertical-box.c \
nautilus-lib-self-check-functions.c \
nautilus-link.c \
nautilus-list-column-title.c \
......
/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */
/* nautilus-keep-last-vertical-box.c: Subclass of GtkVBox that clips off
items that don't fit, except the last one.
Copyright (C) 2000 Eazel, Inc.
The Gnome Library is free software; you can redistribute it and/or
modify it under the terms of the GNU Library General Public License as
published by the Free Software Foundation; either version 2 of the
License, or (at your option) any later version.
The Gnome Library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Library General Public License for more details.
You should have received a copy of the GNU Library General Public
License along with the Gnome Library; see the file COPYING.LIB. If not,
write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
Boston, MA 02111-1307, USA.
Author: John Sullivan <sullivan@eazel.com>,
*/
#include <config.h>
#include "nautilus-keep-last-vertical-box.h"
#include "nautilus-gtk-macros.h"
static void nautilus_keep_last_vertical_box_initialize_class (NautilusKeepLastVerticalBoxClass *class);
static void nautilus_keep_last_vertical_box_initialize (NautilusKeepLastVerticalBox *box);
static void nautilus_keep_last_vertical_box_size_allocate (GtkWidget *widget,
GtkAllocation *allocation);
NAUTILUS_DEFINE_CLASS_BOILERPLATE (NautilusKeepLastVerticalBox, nautilus_keep_last_vertical_box, GTK_TYPE_VBOX)
/* Standard class initialization function */
static void
nautilus_keep_last_vertical_box_initialize_class (NautilusKeepLastVerticalBoxClass *klass)
{
GtkWidgetClass *widget_class;
widget_class = (GtkWidgetClass *) klass;
widget_class->size_allocate = nautilus_keep_last_vertical_box_size_allocate;
}
/* Standard object initialization function */
static void
nautilus_keep_last_vertical_box_initialize (NautilusKeepLastVerticalBox *box)
{
}
/* nautilus_keep_last_vertical_box_new:
*
* Create a new vertical box that clips off items from the end that don't
* fit, except the last item, which is always kept. When packing this widget
* into another vbox, use TRUE for expand and TRUE for fill or this class's
* special clipping magic won't work because this widget's allocation might
* be larger than the available space.
*
* @spacing: Vertical space between items.
*
* Return value: A new NautilusKeepLastVerticalBox
*/
GtkWidget *
nautilus_keep_last_vertical_box_new (gint spacing)
{
NautilusKeepLastVerticalBox *box;
box = gtk_type_new (nautilus_keep_last_vertical_box_get_type ());
GTK_BOX (box)->spacing = spacing;
GTK_BOX (box)->homogeneous = FALSE;
return GTK_WIDGET (box);
}
static void
nautilus_keep_last_vertical_box_size_allocate (GtkWidget *widget,
GtkAllocation *allocation)
{
GtkBox *box;
GtkBoxChild *last_child, *child;
GList *children;
GtkAllocation last_child_allocation, child_allocation, tiny_allocation;
g_return_if_fail (NAUTILUS_IS_KEEP_LAST_VERTICAL_BOX (widget));
g_return_if_fail (allocation != NULL);
NAUTILUS_CALL_PARENT_CLASS (GTK_WIDGET_CLASS, size_allocate, (widget, allocation));
box = GTK_BOX (widget);
children = g_list_last (box->children);
if (children != NULL) {
last_child = children->data;
children = children->prev;
last_child_allocation = last_child->widget->allocation;
/* If last child doesn't fit vertically, prune items from the end of the
* list one at a time until it does.
*/
if (last_child_allocation.y + last_child_allocation.height >
allocation->y + allocation->height) {
while (children != NULL) {
child = children->data;
children = children->prev;
child_allocation = child->widget->allocation;
/* Reposition this child so that it does not appear.
* Setting the width & height to 0 is not enough, as
* one pixel is still drawn. Must also move it outside
* visible range.
*/
tiny_allocation.x = tiny_allocation.y = -1;
tiny_allocation.height = tiny_allocation.width = 0;
gtk_widget_size_allocate (child->widget, &tiny_allocation);
/* We're done if the special last item fits now. */
if (child_allocation.y + last_child_allocation.height <=
allocation->y + allocation->height) {
last_child_allocation.y = child_allocation.y;
gtk_widget_size_allocate (last_child->widget, &last_child_allocation);
break;
}
}
}
}
}
/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */
/* nautilus-keep-last-vertical-box.h: Subclass of GtkVBox that clips off
items that don't fit, except the last one.
Copyright (C) 2000 Eazel, Inc.
The Gnome Library is free software; you can redistribute it and/or
modify it under the terms of the GNU Library General Public License as
published by the Free Software Foundation; either version 2 of the
License, or (at your option) any later version.
The Gnome Library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Library General Public License for more details.
You should have received a copy of the GNU Library General Public
License along with the Gnome Library; see the file COPYING.LIB. If not,
write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
Boston, MA 02111-1307, USA.
Author: John Sullivan <sullivan@eazel.com>,
*/
#ifndef NAUTILUS_KEEP_LAST_VERTICAL_BOX_H
#define NAUTILUS_KEEP_LAST_VERTICAL_BOX_H
#include <gtk/gtkvbox.h>
#define NAUTILUS_TYPE_KEEP_LAST_VERTICAL_BOX (nautilus_keep_last_vertical_box_get_type ())
#define NAUTILUS_KEEP_LAST_VERTICAL_BOX(obj) (GTK_CHECK_CAST ((obj), NAUTILUS_TYPE_KEEP_LAST_VERTICAL_BOX, NautilusKeepLastVerticalBox))
#define NAUTILUS_KEEP_LAST_VERTICAL_BOX_CLASS(klass) (GTK_CHECK_CLASS_CAST ((klass), NAUTILUS_TYPE_KEEP_LAST_VERTICAL_BOX, NautilusKeepLastVerticalBoxClass))
#define NAUTILUS_IS_KEEP_LAST_VERTICAL_BOX(obj) (GTK_CHECK_TYPE ((obj), NAUTILUS_TYPE_KEEP_LAST_VERTICAL_BOX))
#define NAUTILUS_IS_KEEP_LAST_VERTICAL_BOX_CLASS(klass) (GTK_CHECK_CLASS_TYPE ((klass), NAUTILUS_TYPE_KEEP_LAST_VERTICAL_BOX))
typedef struct NautilusKeepLastVerticalBox NautilusKeepLastVerticalBox;
typedef struct NautilusKeepLastVerticalBoxClass NautilusKeepLastVerticalBoxClass;
struct NautilusKeepLastVerticalBox {
GtkVBox vbox;
};
struct NautilusKeepLastVerticalBoxClass {
GtkVBoxClass parent_class;
};
GtkType nautilus_keep_last_vertical_box_get_type (void);
GtkWidget *nautilus_keep_last_vertical_box_new (gint spacing);
#endif /* NAUTILUS_KEEP_LAST_VERTICAL_BOX_H */
......@@ -55,6 +55,7 @@ libnautilus_extensionsinclude_HEADERS= \
nautilus-icon-container.h \
nautilus-icon-factory.h \
nautilus-icon-text-item.h \
nautilus-keep-last-vertical-box.h \
nautilus-link.h \
nautilus-list-column-title.h \
nautilus-list.h \
......@@ -103,6 +104,7 @@ libnautilus_extensions_la_SOURCES = \
nautilus-icon-factory.c \
nautilus-icon-grid.c \
nautilus-icon-text-item.c \
nautilus-keep-last-vertical-box.c \
nautilus-lib-self-check-functions.c \
nautilus-link.c \
nautilus-list-column-title.c \
......
/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */
/* nautilus-keep-last-vertical-box.c: Subclass of GtkVBox that clips off
items that don't fit, except the last one.
Copyright (C) 2000 Eazel, Inc.
The Gnome Library is free software; you can redistribute it and/or
modify it under the terms of the GNU Library General Public License as
published by the Free Software Foundation; either version 2 of the
License, or (at your option) any later version.
The Gnome Library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Library General Public License for more details.
You should have received a copy of the GNU Library General Public
License along with the Gnome Library; see the file COPYING.LIB. If not,
write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
Boston, MA 02111-1307, USA.
Author: John Sullivan <sullivan@eazel.com>,
*/
#include <config.h>
#include "nautilus-keep-last-vertical-box.h"
#include "nautilus-gtk-macros.h"
static void nautilus_keep_last_vertical_box_initialize_class (NautilusKeepLastVerticalBoxClass *class);
static void nautilus_keep_last_vertical_box_initialize (NautilusKeepLastVerticalBox *box);
static void nautilus_keep_last_vertical_box_size_allocate (GtkWidget *widget,
GtkAllocation *allocation);
NAUTILUS_DEFINE_CLASS_BOILERPLATE (NautilusKeepLastVerticalBox, nautilus_keep_last_vertical_box, GTK_TYPE_VBOX)
/* Standard class initialization function */
static void
nautilus_keep_last_vertical_box_initialize_class (NautilusKeepLastVerticalBoxClass *klass)
{
GtkWidgetClass *widget_class;
widget_class = (GtkWidgetClass *) klass;
widget_class->size_allocate = nautilus_keep_last_vertical_box_size_allocate;
}
/* Standard object initialization function */
static void
nautilus_keep_last_vertical_box_initialize (NautilusKeepLastVerticalBox *box)
{
}
/* nautilus_keep_last_vertical_box_new:
*
* Create a new vertical box that clips off items from the end that don't
* fit, except the last item, which is always kept. When packing this widget
* into another vbox, use TRUE for expand and TRUE for fill or this class's
* special clipping magic won't work because this widget's allocation might
* be larger than the available space.
*
* @spacing: Vertical space between items.
*
* Return value: A new NautilusKeepLastVerticalBox
*/
GtkWidget *
nautilus_keep_last_vertical_box_new (gint spacing)
{
NautilusKeepLastVerticalBox *box;
box = gtk_type_new (nautilus_keep_last_vertical_box_get_type ());
GTK_BOX (box)->spacing = spacing;
GTK_BOX (box)->homogeneous = FALSE;
return GTK_WIDGET (box);
}
static void
nautilus_keep_last_vertical_box_size_allocate (GtkWidget *widget,
GtkAllocation *allocation)
{
GtkBox *box;
GtkBoxChild *last_child, *child;
GList *children;
GtkAllocation last_child_allocation, child_allocation, tiny_allocation;
g_return_if_fail (NAUTILUS_IS_KEEP_LAST_VERTICAL_BOX (widget));
g_return_if_fail (allocation != NULL);
NAUTILUS_CALL_PARENT_CLASS (GTK_WIDGET_CLASS, size_allocate, (widget, allocation));
box = GTK_BOX (widget);
children = g_list_last (box->children);
if (children != NULL) {
last_child = children->data;
children = children->prev;
last_child_allocation = last_child->widget->allocation;
/* If last child doesn't fit vertically, prune items from the end of the
* list one at a time until it does.
*/
if (last_child_allocation.y + last_child_allocation.height >
allocation->y + allocation->height) {
while (children != NULL) {
child = children->data;
children = children->prev;
child_allocation = child->widget->allocation;
/* Reposition this child so that it does not appear.
* Setting the width & height to 0 is not enough, as
* one pixel is still drawn. Must also move it outside
* visible range.
*/
tiny_allocation.x = tiny_allocation.y = -1;
tiny_allocation.height = tiny_allocation.width = 0;
gtk_widget_size_allocate (child->widget, &tiny_allocation);
/* We're done if the special last item fits now. */
if (child_allocation.y + last_child_allocation.height <=
allocation->y + allocation->height) {
last_child_allocation.y = child_allocation.y;
gtk_widget_size_allocate (last_child->widget, &last_child_allocation);
break;
}
}
}
}
}
/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */
/* nautilus-keep-last-vertical-box.h: Subclass of GtkVBox that clips off
items that don't fit, except the last one.
Copyright (C) 2000 Eazel, Inc.
The Gnome Library is free software; you can redistribute it and/or
modify it under the terms of the GNU Library General Public License as
published by the Free Software Foundation; either version 2 of the
License, or (at your option) any later version.
The Gnome Library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Library General Public License for more details.
You should have received a copy of the GNU Library General Public
License along with the Gnome Library; see the file COPYING.LIB. If not,
write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
Boston, MA 02111-1307, USA.
Author: John Sullivan <sullivan@eazel.com>,
*/
#ifndef NAUTILUS_KEEP_LAST_VERTICAL_BOX_H
#define NAUTILUS_KEEP_LAST_VERTICAL_BOX_H
#include <gtk/gtkvbox.h>
#define NAUTILUS_TYPE_KEEP_LAST_VERTICAL_BOX (nautilus_keep_last_vertical_box_get_type ())
#define NAUTILUS_KEEP_LAST_VERTICAL_BOX(obj) (GTK_CHECK_CAST ((obj), NAUTILUS_TYPE_KEEP_LAST_VERTICAL_BOX, NautilusKeepLastVerticalBox))
#define NAUTILUS_KEEP_LAST_VERTICAL_BOX_CLASS(klass) (GTK_CHECK_CLASS_CAST ((klass), NAUTILUS_TYPE_KEEP_LAST_VERTICAL_BOX, NautilusKeepLastVerticalBoxClass))
#define NAUTILUS_IS_KEEP_LAST_VERTICAL_BOX(obj) (GTK_CHECK_TYPE ((obj), NAUTILUS_TYPE_KEEP_LAST_VERTICAL_BOX))
#define NAUTILUS_IS_KEEP_LAST_VERTICAL_BOX_CLASS(klass) (GTK_CHECK_CLASS_TYPE ((klass), NAUTILUS_TYPE_KEEP_LAST_VERTICAL_BOX))
typedef struct NautilusKeepLastVerticalBox NautilusKeepLastVerticalBox;
typedef struct NautilusKeepLastVerticalBoxClass NautilusKeepLastVerticalBoxClass;
struct NautilusKeepLastVerticalBox {
GtkVBox vbox;
};
struct NautilusKeepLastVerticalBoxClass {
GtkVBoxClass parent_class;
};
GtkType nautilus_keep_last_vertical_box_get_type (void);
GtkWidget *nautilus_keep_last_vertical_box_new (gint spacing);
#endif /* NAUTILUS_KEEP_LAST_VERTICAL_BOX_H */
......@@ -39,6 +39,7 @@
#include <libnautilus-extensions/nautilus-global-preferences.h>
#include <libnautilus-extensions/nautilus-gtk-extensions.h>
#include <libnautilus-extensions/nautilus-gtk-macros.h>
#include <libnautilus-extensions/nautilus-keep-last-vertical-box.h>
#include <libnautilus-extensions/nautilus-metadata.h>
#include <libnautilus-extensions/nautilus-string.h>
#include <libnautilus-extensions/nautilus-mime-type.h>
......@@ -53,6 +54,7 @@ struct NautilusIndexPanelDetails {
GtkNotebook *notebook;
NautilusIndexTabs *index_tabs;
NautilusIndexTabs *title_tab;
GtkHBox *button_box_centerer;
GtkVBox *button_box;
gboolean has_buttons;
char *uri;
......@@ -143,11 +145,17 @@ nautilus_index_panel_initialize_class (GtkObjectClass *object_klass)
static void
make_button_box (NautilusIndexPanel *index_panel)
{
index_panel->details->button_box = GTK_VBOX (gtk_vbox_new (TRUE, GNOME_PAD_SMALL));
index_panel->details->button_box_centerer = GTK_HBOX (gtk_hbox_new (FALSE, 0));
gtk_widget_show (GTK_WIDGET (index_panel->details->button_box_centerer));
gtk_box_pack_start_defaults (GTK_BOX (index_panel->details->container),
GTK_WIDGET (index_panel->details->button_box_centerer));
index_panel->details->button_box = GTK_VBOX (nautilus_keep_last_vertical_box_new (GNOME_PAD_SMALL));
gtk_container_set_border_width (GTK_CONTAINER (index_panel->details->button_box), GNOME_PAD);
gtk_widget_show (GTK_WIDGET (index_panel->details->button_box));
gtk_box_pack_start_defaults (GTK_BOX (index_panel->details->container),
GTK_WIDGET (index_panel->details->button_box));
gtk_box_pack_start (GTK_BOX (index_panel->details->button_box_centerer),
GTK_WIDGET (index_panel->details->button_box),
TRUE, FALSE, 0);
index_panel->details->has_buttons = FALSE;
}
......@@ -739,6 +747,15 @@ add_command_buttons (NautilusIndexPanel *index_panel, GList *command_list)
gtk_widget_show (temp_button);
}
/* Catch-all button after all the others. */
temp_button = gtk_button_new_with_label (_("Open with ..."));
gtk_widget_set_sensitive (temp_button, FALSE);
gtk_widget_show (temp_button);
gtk_box_pack_start (GTK_BOX (index_panel->details->button_box),
temp_button,
FALSE, FALSE,
0);
}
/* here's where we set up the command buttons, based on the mime-type of the associated URL */
......@@ -756,7 +773,7 @@ nautilus_index_panel_update_buttons (NautilusIndexPanel *index_panel)
/* dispose any existing buttons */
if (index_panel->details->has_buttons) {
gtk_container_remove (GTK_CONTAINER (index_panel->details->container),
GTK_WIDGET (index_panel->details->button_box));
GTK_WIDGET (index_panel->details->button_box_centerer));
make_button_box (index_panel);
}
......
......@@ -39,6 +39,7 @@
#include <libnautilus-extensions/nautilus-global-preferences.h>
#include <libnautilus-extensions/nautilus-gtk-extensions.h>
#include <libnautilus-extensions/nautilus-gtk-macros.h>
#include <libnautilus-extensions/nautilus-keep-last-vertical-box.h>
#include <libnautilus-extensions/nautilus-metadata.h>
#include <libnautilus-extensions/nautilus-string.h>
#include <libnautilus-extensions/nautilus-mime-type.h>
......@@ -53,6 +54,7 @@ struct NautilusIndexPanelDetails {
GtkNotebook *notebook;
NautilusIndexTabs *index_tabs;
NautilusIndexTabs *title_tab;
GtkHBox *button_box_centerer;
GtkVBox *button_box;
gboolean has_buttons;
char *uri;
......@@ -143,11 +145,17 @@ nautilus_index_panel_initialize_class (GtkObjectClass *object_klass)
static void
make_button_box (NautilusIndexPanel *index_panel)
{
index_panel->details->button_box = GTK_VBOX (gtk_vbox_new (TRUE, GNOME_PAD_SMALL));
index_panel->details->button_box_centerer = GTK_HBOX (gtk_hbox_new (FALSE, 0));
gtk_widget_show (GTK_WIDGET (index_panel->details->button_box_centerer));
gtk_box_pack_start_defaults (GTK_BOX (index_panel->details->container),
GTK_WIDGET (index_panel->details->button_box_centerer));
index_panel->details->button_box = GTK_VBOX (nautilus_keep_last_vertical_box_new (GNOME_PAD_SMALL));
gtk_container_set_border_width (GTK_CONTAINER (index_panel->details->button_box), GNOME_PAD);
gtk_widget_show (GTK_WIDGET (index_panel->details->button_box));
gtk_box_pack_start_defaults (GTK_BOX (index_panel->details->container),
GTK_WIDGET (index_panel->details->button_box));
gtk_box_pack_start (GTK_BOX (index_panel->details->button_box_centerer),
GTK_WIDGET (index_panel->details->button_box),
TRUE, FALSE, 0);
index_panel->details->has_buttons = FALSE;
}
......@@ -739,6 +747,15 @@ add_command_buttons (NautilusIndexPanel *index_panel, GList *command_list)
gtk_widget_show (temp_button);
}
/* Catch-all button after all the others. */
temp_button = gtk_button_new_with_label (_("Open with ..."));
gtk_widget_set_sensitive (temp_button, FALSE);
gtk_widget_show (temp_button);
gtk_box_pack_start (GTK_BOX (index_panel->details->button_box),
temp_button,
FALSE, FALSE,
0);
}
/* here's where we set up the command buttons, based on the mime-type of the associated URL */
......@@ -756,7 +773,7 @@ nautilus_index_panel_update_buttons (NautilusIndexPanel *index_panel)
/* dispose any existing buttons */
if (index_panel->details->has_buttons) {
gtk_container_remove (GTK_CONTAINER (index_panel->details->container),
GTK_WIDGET (index_panel->details->button_box));
GTK_WIDGET (index_panel->details->button_box_centerer));
make_button_box (index_panel);
}
......
......@@ -39,6 +39,7 @@
#include <libnautilus-extensions/nautilus-global-preferences.h>
#include <libnautilus-extensions/nautilus-gtk-extensions.h>
#include <libnautilus-extensions/nautilus-gtk-macros.h>
#include <libnautilus-extensions/nautilus-keep-last-vertical-box.h>
#include <libnautilus-extensions/nautilus-metadata.h>
#include <libnautilus-extensions/nautilus-string.h>
#include <libnautilus-extensions/nautilus-mime-type.h>
......@@ -53,6 +54,7 @@ struct NautilusIndexPanelDetails {
GtkNotebook *notebook;
NautilusIndexTabs *index_tabs;
NautilusIndexTabs *title_tab;
GtkHBox *button_box_centerer;
GtkVBox *button_box;
gboolean has_buttons;
char *uri;
......@@ -143,11 +145,17 @@ nautilus_index_panel_initialize_class (GtkObjectClass *object_klass)
static void
make_button_box (NautilusIndexPanel *index_panel)
{
index_panel->details->button_box = GTK_VBOX (gtk_vbox_new (TRUE, GNOME_PAD_SMALL));
index_panel->details->button_box_centerer = GTK_HBOX (gtk_hbox_new (FALSE, 0));
gtk_widget_show (GTK_WIDGET (index_panel->details->button_box_centerer));
gtk_box_pack_start_defaults (GTK_BOX (index_panel->details->container),
GTK_WIDGET (index_panel->details->button_box_centerer));
index_panel->details->button_box = GTK_VBOX (nautilus_keep_last_vertical_box_new (GNOME_PAD_SMALL));
gtk_container_set_border_width (GTK_CONTAINER (index_panel->details->button_box), GNOME_PAD);
gtk_widget_show (GTK_WIDGET (index_panel->details->button_box));
gtk_box_pack_start_defaults (GTK_BOX (index_panel->details->container),
GTK_WIDGET (index_panel->details->button_box));
gtk_box_pack_start (GTK_BOX (index_panel->details->button_box_centerer),
GTK_WIDGET (index_panel->details->button_box),
TRUE, FALSE, 0);
index_panel->details->has_buttons = FALSE;
}
......@@ -739,6 +747,15 @@ add_command_buttons (NautilusIndexPanel *index_panel, GList *command_list)
gtk_widget_show (temp_button);
}
/* Catch-all button after all the others. */
temp_button = gtk_button_new_with_label (_("Open with ..."));
gtk_widget_set_sensitive (temp_button, FALSE);
gtk_widget_show (temp_button);
gtk_box_pack_start (GTK_BOX (index_panel->details->button_box),
temp_button,
FALSE, FALSE,
0);
}
/* here's where we set up the command buttons, based on the mime-type of the associated URL */
......@@ -756,7 +773,7 @@ nautilus_index_panel_update_buttons (NautilusIndexPanel *index_panel)
/* dispose any existing buttons */
if (index_panel->details->has_buttons) {
gtk_container_remove (GTK_CONTAINER (index_panel->details->container),
GTK_WIDGET (index_panel->details->button_box));
GTK_WIDGET (index_panel->details->button_box_centerer));
make_button_box (index_panel);
}
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment