Remove member hbox' from
struct _EShellFolderTitleBarPrivate'.
* e-shell-folder-title-bar.c: Remove member `hbox' from `struct _EShellFolderTitleBarPrivate'. (make_icon_pixmap): Removed. (rgb_from_gdk_color): Removed. (endarken_style): Removed. (set_style_cb): Removed. (create_arrow_pixmap): Renamed from `create_icon_pixmap'. (get_max_clipped_label_width): New helper function. (size_allocate_icon): New helper function. (size_allocate_button): New helper function. (size_allocate_label): New helper function. (add_icon_widget): New helper function. (realize): Changed to use `add_icon_widget()'. (size_allocate): New function, handler for the ::size_allocate method. (class_init): Install it. (e_shell_folder_title_bar_construct): Changed so that the widget get added to this widget instead of adding an hbox to it and adding the widgets to the hbox. (e_shell_folder_title_bar_set_icon): Changed to use `add_icon_widget()'. * e-shell-folder-title-bar.h, e-shell-folder-title-bar.c: Changed to derive from GtkHBox, not GtkEventBox. svn path=/trunk/; revision=11718
This commit is contained in:
@ -1,3 +1,30 @@
|
|||||||
|
2001-08-06 Ettore Perazzoli <ettore@ximian.com>
|
||||||
|
|
||||||
|
* e-shell-folder-title-bar.c: Remove member `hbox' from `struct
|
||||||
|
_EShellFolderTitleBarPrivate'.
|
||||||
|
(make_icon_pixmap): Removed.
|
||||||
|
(rgb_from_gdk_color): Removed.
|
||||||
|
(endarken_style): Removed.
|
||||||
|
(set_style_cb): Removed.
|
||||||
|
(create_arrow_pixmap): Renamed from `create_icon_pixmap'.
|
||||||
|
(get_max_clipped_label_width): New helper function.
|
||||||
|
(size_allocate_icon): New helper function.
|
||||||
|
(size_allocate_button): New helper function.
|
||||||
|
(size_allocate_label): New helper function.
|
||||||
|
(add_icon_widget): New helper function.
|
||||||
|
(realize): Changed to use `add_icon_widget()'.
|
||||||
|
(size_allocate): New function, handler for the ::size_allocate
|
||||||
|
method.
|
||||||
|
(class_init): Install it.
|
||||||
|
(e_shell_folder_title_bar_construct): Changed so that the widget
|
||||||
|
get added to this widget instead of adding an hbox to it and
|
||||||
|
adding the widgets to the hbox.
|
||||||
|
(e_shell_folder_title_bar_set_icon): Changed to use
|
||||||
|
`add_icon_widget()'.
|
||||||
|
|
||||||
|
* e-shell-folder-title-bar.h, e-shell-folder-title-bar.c: Changed
|
||||||
|
to derive from GtkHBox, not GtkEventBox.
|
||||||
|
|
||||||
2001-08-06 Christopher James Lahey <clahey@ximian.com>
|
2001-08-06 Christopher James Lahey <clahey@ximian.com>
|
||||||
|
|
||||||
* e-storage-set-view.c (tree_drag_motion): Turn on highlighting on
|
* e-storage-set-view.c (tree_drag_motion): Turn on highlighting on
|
||||||
|
@ -25,8 +25,6 @@
|
|||||||
#include <config.h>
|
#include <config.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include <gtk/gtkbox.h>
|
|
||||||
#include <gtk/gtkhbox.h>
|
|
||||||
#include <gtk/gtklabel.h>
|
#include <gtk/gtklabel.h>
|
||||||
#include <gtk/gtkpixmap.h>
|
#include <gtk/gtkpixmap.h>
|
||||||
#include <gtk/gtkrc.h>
|
#include <gtk/gtkrc.h>
|
||||||
@ -43,16 +41,13 @@
|
|||||||
#include "e-shell-folder-title-bar.h"
|
#include "e-shell-folder-title-bar.h"
|
||||||
|
|
||||||
|
|
||||||
#define PARENT_TYPE GTK_TYPE_EVENT_BOX
|
#define PARENT_TYPE GTK_TYPE_HBOX
|
||||||
static GtkEventBox *parent_class = NULL;
|
static GtkHBox *parent_class = NULL;
|
||||||
|
|
||||||
struct _EShellFolderTitleBarPrivate {
|
struct _EShellFolderTitleBarPrivate {
|
||||||
GdkPixbuf *icon;
|
GdkPixbuf *icon;
|
||||||
GtkWidget *icon_widget;
|
GtkWidget *icon_widget;
|
||||||
|
|
||||||
/* The hbox containing the button, the label, the extra label, and the icon on the right. */
|
|
||||||
GtkWidget *hbox;
|
|
||||||
|
|
||||||
/* We have a label and a button. When the button is enabled,
|
/* We have a label and a button. When the button is enabled,
|
||||||
the label is hidden; when the button is disable, only the
|
the label is hidden; when the button is disable, only the
|
||||||
label is visible. */
|
label is visible. */
|
||||||
@ -90,63 +85,11 @@ static char *arrow_xpm[] = {
|
|||||||
" . ",
|
" . ",
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
/* Icon handling. */
|
|
||||||
|
|
||||||
static unsigned int
|
|
||||||
rgb_from_gdk_color (GdkColor *color)
|
|
||||||
{
|
|
||||||
return (((color->red >> 8) << 16)
|
|
||||||
| ((color->green >> 8) << 8)
|
|
||||||
| ((color->blue >> 8)));
|
|
||||||
}
|
|
||||||
|
|
||||||
static GdkPixmap *
|
|
||||||
make_icon_pixmap (EShellFolderTitleBar *folder_title_bar,
|
|
||||||
const GdkPixbuf *pixbuf)
|
|
||||||
{
|
|
||||||
GdkPixmap *pixmap;
|
|
||||||
GtkWidget *widget;
|
|
||||||
unsigned int depth;
|
|
||||||
unsigned int rgb;
|
|
||||||
|
|
||||||
widget = GTK_WIDGET (folder_title_bar);
|
|
||||||
|
|
||||||
rgb = rgb_from_gdk_color (&widget->style->bg[GTK_STATE_NORMAL]);
|
|
||||||
|
|
||||||
depth = gtk_widget_get_visual (widget)->depth;
|
|
||||||
|
|
||||||
pixmap = gdk_pixmap_new (GTK_WIDGET (folder_title_bar)->window,
|
|
||||||
E_SHELL_MINI_ICON_SIZE, E_SHELL_MINI_ICON_SIZE,
|
|
||||||
depth);
|
|
||||||
|
|
||||||
if (pixbuf == NULL) {
|
|
||||||
gdk_draw_rectangle (pixmap, widget->style->bg_gc[GTK_STATE_NORMAL], TRUE,
|
|
||||||
0, 0, E_SHELL_MINI_ICON_SIZE, E_SHELL_MINI_ICON_SIZE);
|
|
||||||
} else {
|
|
||||||
GdkPixbuf *composited_pixbuf;
|
|
||||||
|
|
||||||
composited_pixbuf = gdk_pixbuf_composite_color_simple
|
|
||||||
(pixbuf, gdk_pixbuf_get_width (pixbuf), gdk_pixbuf_get_height (pixbuf),
|
|
||||||
GDK_INTERP_NEAREST, 255, 32, rgb, rgb);
|
|
||||||
|
|
||||||
gdk_pixbuf_render_to_drawable (composited_pixbuf,
|
|
||||||
pixmap, widget->style->fg_gc[GTK_STATE_NORMAL],
|
|
||||||
0, 0, 0, 0,
|
|
||||||
E_SHELL_MINI_ICON_SIZE, E_SHELL_MINI_ICON_SIZE,
|
|
||||||
GDK_RGB_DITHER_MAX, 0, 0);
|
|
||||||
|
|
||||||
gdk_pixbuf_unref (composited_pixbuf);
|
|
||||||
}
|
|
||||||
|
|
||||||
return pixmap;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/* Icon pixmap. */
|
/* Icon pixmap. */
|
||||||
|
|
||||||
static GtkWidget *
|
static GtkWidget *
|
||||||
create_icon_pixmap (GtkWidget *parent)
|
create_arrow_pixmap (GtkWidget *parent)
|
||||||
{
|
{
|
||||||
GtkWidget *gtk_pixmap;
|
GtkWidget *gtk_pixmap;
|
||||||
GdkPixmap *gdk_pixmap;
|
GdkPixmap *gdk_pixmap;
|
||||||
@ -175,7 +118,7 @@ title_button_box_realize_cb (GtkWidget *widget,
|
|||||||
if (priv->button_arrow != NULL)
|
if (priv->button_arrow != NULL)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
button_arrow = create_icon_pixmap (widget);
|
button_arrow = create_arrow_pixmap (widget);
|
||||||
|
|
||||||
gtk_widget_show (button_arrow);
|
gtk_widget_show (button_arrow);
|
||||||
gtk_box_pack_start (GTK_BOX (widget), button_arrow, FALSE, TRUE, 2);
|
gtk_box_pack_start (GTK_BOX (widget), button_arrow, FALSE, TRUE, 2);
|
||||||
@ -184,57 +127,131 @@ title_button_box_realize_cb (GtkWidget *widget,
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/* Style handling. */
|
/* Utility functions. */
|
||||||
|
|
||||||
static void
|
static int
|
||||||
endarken_style (GtkWidget *widget)
|
get_max_clipped_label_width (EClippedLabel *clipped_label)
|
||||||
{
|
{
|
||||||
#ifndef E_USE_STYLES
|
GdkFont *font;
|
||||||
GtkStyle *style;
|
int width;
|
||||||
GtkRcStyle *new_rc_style;
|
|
||||||
int i;
|
|
||||||
|
|
||||||
style = widget->style;
|
font = GTK_WIDGET (clipped_label)->style->font;
|
||||||
|
|
||||||
new_rc_style = gtk_rc_style_new ();
|
width = gdk_string_width (font, clipped_label->label);
|
||||||
|
width += 2 * GTK_MISC (clipped_label)->xpad;
|
||||||
|
|
||||||
for (i = 0; i < 5; i++) {
|
return width;
|
||||||
new_rc_style->bg[i].red = style->bg[i].red * .8;
|
|
||||||
new_rc_style->bg[i].green = style->bg[i].green * .8;
|
|
||||||
new_rc_style->bg[i].blue = style->bg[i].blue * .8;
|
|
||||||
new_rc_style->fg[i].red = 0xffff;
|
|
||||||
new_rc_style->fg[i].green = 0xffff;
|
|
||||||
new_rc_style->fg[i].blue = 0xffff;
|
|
||||||
|
|
||||||
new_rc_style->color_flags[i] = GTK_RC_BG | GTK_RC_FG;
|
|
||||||
}
|
|
||||||
|
|
||||||
gtk_widget_modify_style (widget, new_rc_style);
|
|
||||||
|
|
||||||
gtk_rc_style_unref (new_rc_style);
|
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
style_set_cb (GtkWidget *widget,
|
size_allocate_icon (EShellFolderTitleBar *title_bar,
|
||||||
GtkStyle *previous_style,
|
GtkAllocation *allocation,
|
||||||
void *data)
|
int *available_width_inout)
|
||||||
{
|
{
|
||||||
EShellFolderTitleBar *folder_title_bar;
|
EShellFolderTitleBarPrivate *priv;
|
||||||
|
GtkRequisition icon_requisition;
|
||||||
|
GtkAllocation icon_allocation;
|
||||||
|
int border_width;
|
||||||
|
|
||||||
folder_title_bar = E_SHELL_FOLDER_TITLE_BAR (widget);
|
priv = title_bar->priv;
|
||||||
|
|
||||||
/*
|
|
||||||
This will cause a style_set signal to be emitted again,
|
|
||||||
so we need to do this to prevent infinite recursion.
|
|
||||||
*/
|
|
||||||
gtk_signal_handler_block_by_func (GTK_OBJECT (widget), GTK_SIGNAL_FUNC (style_set_cb), data);
|
|
||||||
|
|
||||||
endarken_style (widget);
|
if (priv->icon_widget == NULL)
|
||||||
gtk_signal_handler_unblock_by_func (GTK_OBJECT (widget), GTK_SIGNAL_FUNC (style_set_cb), data);
|
return;
|
||||||
|
|
||||||
if (folder_title_bar->priv->icon)
|
border_width = GTK_CONTAINER (title_bar)->border_width;
|
||||||
e_shell_folder_title_bar_set_icon (folder_title_bar, folder_title_bar->priv->icon);
|
|
||||||
|
gtk_widget_get_child_requisition (priv->icon_widget, &icon_requisition);
|
||||||
|
|
||||||
|
icon_allocation.x = allocation->x + allocation->width - border_width - icon_requisition.width;
|
||||||
|
icon_allocation.y = allocation->y + border_width;
|
||||||
|
icon_allocation.width = icon_requisition.width;
|
||||||
|
icon_allocation.height = allocation->height - 2 * border_width;
|
||||||
|
|
||||||
|
gtk_widget_size_allocate (priv->icon_widget, &icon_allocation);
|
||||||
|
|
||||||
|
*available_width_inout -= icon_allocation.width;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
size_allocate_button (EShellFolderTitleBar *title_bar,
|
||||||
|
GtkAllocation *allocation,
|
||||||
|
int *available_width_inout)
|
||||||
|
{
|
||||||
|
EShellFolderTitleBarPrivate *priv;
|
||||||
|
GtkAllocation child_allocation;
|
||||||
|
GtkRequisition child_requisition;
|
||||||
|
int border_width;
|
||||||
|
|
||||||
|
priv = title_bar->priv;
|
||||||
|
|
||||||
|
border_width = GTK_CONTAINER (title_bar)->border_width;
|
||||||
|
|
||||||
|
gtk_widget_get_child_requisition (priv->button, &child_requisition);
|
||||||
|
child_allocation.x = allocation->x + border_width;
|
||||||
|
child_allocation.y = allocation->y + border_width;
|
||||||
|
child_allocation.height = allocation->height - 2 * border_width;
|
||||||
|
|
||||||
|
child_allocation.width = child_requisition.width;
|
||||||
|
child_allocation.width += get_max_clipped_label_width (E_CLIPPED_LABEL (priv->button_label));
|
||||||
|
|
||||||
|
child_allocation.width = MIN (child_allocation.width, *available_width_inout);
|
||||||
|
|
||||||
|
gtk_widget_size_allocate (priv->button, & child_allocation);
|
||||||
|
|
||||||
|
*available_width_inout -= child_allocation.width;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
size_allocate_label (EShellFolderTitleBar *title_bar,
|
||||||
|
GtkAllocation *allocation,
|
||||||
|
int *available_width_inout)
|
||||||
|
{
|
||||||
|
EShellFolderTitleBarPrivate *priv;
|
||||||
|
GtkAllocation child_allocation;
|
||||||
|
int border_width;
|
||||||
|
|
||||||
|
priv = title_bar->priv;
|
||||||
|
|
||||||
|
border_width = GTK_CONTAINER (title_bar)->border_width;
|
||||||
|
|
||||||
|
child_allocation.x = allocation->x + border_width;
|
||||||
|
child_allocation.y = allocation->y + border_width;
|
||||||
|
child_allocation.height = allocation->height - 2 * border_width;
|
||||||
|
|
||||||
|
child_allocation.width = MIN (get_max_clipped_label_width (E_CLIPPED_LABEL (priv->label)),
|
||||||
|
*available_width_inout);
|
||||||
|
|
||||||
|
gtk_widget_size_allocate (priv->label, & child_allocation);
|
||||||
|
|
||||||
|
*available_width_inout -= child_allocation.width;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
add_icon_widget (EShellFolderTitleBar *folder_title_bar)
|
||||||
|
{
|
||||||
|
EShellFolderTitleBarPrivate *priv;
|
||||||
|
GdkPixmap *pixmap;
|
||||||
|
GdkBitmap *mask;
|
||||||
|
|
||||||
|
priv = folder_title_bar->priv;
|
||||||
|
|
||||||
|
g_assert (priv->icon != NULL);
|
||||||
|
|
||||||
|
gdk_pixbuf_render_pixmap_and_mask (priv->icon, &pixmap, &mask, 128);
|
||||||
|
|
||||||
|
if (priv->icon_widget != NULL)
|
||||||
|
gtk_widget_destroy (priv->icon_widget);
|
||||||
|
|
||||||
|
priv->icon_widget = gtk_pixmap_new (pixmap, mask);
|
||||||
|
|
||||||
|
gdk_pixmap_unref (pixmap);
|
||||||
|
gdk_pixmap_unref (mask);
|
||||||
|
|
||||||
|
gtk_misc_set_alignment (GTK_MISC (priv->icon_widget), 1.0, .5);
|
||||||
|
gtk_misc_set_padding (GTK_MISC (priv->icon_widget), 0, 0);
|
||||||
|
|
||||||
|
gtk_box_pack_start (GTK_BOX (folder_title_bar), priv->icon_widget, FALSE, TRUE, 2);
|
||||||
|
gtk_widget_show (priv->icon_widget);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -252,6 +269,25 @@ title_button_toggled_cb (GtkToggleButton *button,
|
|||||||
gtk_toggle_button_get_active (button));
|
gtk_toggle_button_get_active (button));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* GtkObject methods. */
|
||||||
|
|
||||||
|
static void
|
||||||
|
destroy (GtkObject *object)
|
||||||
|
{
|
||||||
|
EShellFolderTitleBar *folder_title_bar;
|
||||||
|
EShellFolderTitleBarPrivate *priv;
|
||||||
|
|
||||||
|
folder_title_bar = E_SHELL_FOLDER_TITLE_BAR (object);
|
||||||
|
priv = folder_title_bar->priv;
|
||||||
|
|
||||||
|
if (priv->icon != NULL)
|
||||||
|
gdk_pixbuf_unref (priv->icon);
|
||||||
|
g_free (priv);
|
||||||
|
|
||||||
|
(* GTK_OBJECT_CLASS (parent_class)->destroy) (object);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/* GTkWidget methods. */
|
/* GTkWidget methods. */
|
||||||
|
|
||||||
@ -260,21 +296,14 @@ realize (GtkWidget *widget)
|
|||||||
{
|
{
|
||||||
EShellFolderTitleBar *folder_title_bar;
|
EShellFolderTitleBar *folder_title_bar;
|
||||||
EShellFolderTitleBarPrivate *priv;
|
EShellFolderTitleBarPrivate *priv;
|
||||||
GdkPixmap *pixmap;
|
|
||||||
|
|
||||||
(* GTK_WIDGET_CLASS (parent_class)->realize) (widget);
|
(* GTK_WIDGET_CLASS (parent_class)->realize) (widget);
|
||||||
|
|
||||||
folder_title_bar = E_SHELL_FOLDER_TITLE_BAR (widget);
|
folder_title_bar = E_SHELL_FOLDER_TITLE_BAR (widget);
|
||||||
priv = folder_title_bar->priv;
|
priv = folder_title_bar->priv;
|
||||||
|
|
||||||
pixmap = make_icon_pixmap (folder_title_bar, priv->icon);
|
if (priv->icon != NULL)
|
||||||
priv->icon_widget = gtk_pixmap_new (pixmap, NULL);
|
add_icon_widget (E_SHELL_FOLDER_TITLE_BAR (widget));
|
||||||
gdk_pixmap_unref (pixmap);
|
|
||||||
gtk_widget_show (priv->icon_widget);
|
|
||||||
|
|
||||||
gtk_misc_set_alignment (GTK_MISC (priv->icon_widget), 1.0, .5);
|
|
||||||
gtk_misc_set_padding (GTK_MISC (priv->icon_widget), 0, 0);
|
|
||||||
gtk_box_pack_start (GTK_BOX (priv->hbox), priv->icon_widget, FALSE, FALSE, 2);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
@ -292,23 +321,39 @@ unrealize (GtkWidget *widget)
|
|||||||
priv->icon_widget = NULL;
|
priv->icon_widget = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/* GtkObject methods. */
|
|
||||||
|
|
||||||
static void
|
static void
|
||||||
destroy (GtkObject *object)
|
size_allocate (GtkWidget *widget,
|
||||||
|
GtkAllocation *allocation)
|
||||||
{
|
{
|
||||||
EShellFolderTitleBar *folder_title_bar;
|
EShellFolderTitleBar *title_bar;
|
||||||
EShellFolderTitleBarPrivate *priv;
|
EShellFolderTitleBarPrivate *priv;
|
||||||
|
GtkAllocation label_allocation;
|
||||||
|
int border_width;
|
||||||
|
int available_width;
|
||||||
|
int width_before_icon;
|
||||||
|
|
||||||
folder_title_bar = E_SHELL_FOLDER_TITLE_BAR (object);
|
title_bar = E_SHELL_FOLDER_TITLE_BAR (widget);
|
||||||
priv = folder_title_bar->priv;
|
priv = title_bar->priv;
|
||||||
|
|
||||||
if (priv->icon)
|
border_width = GTK_CONTAINER (widget)->border_width;
|
||||||
gdk_pixbuf_unref (priv->icon);
|
available_width = allocation->width - 2 * border_width;
|
||||||
g_free (priv);
|
|
||||||
|
|
||||||
(* GTK_OBJECT_CLASS (parent_class)->destroy) (object);
|
size_allocate_icon (title_bar, allocation, & available_width);
|
||||||
|
width_before_icon = available_width;
|
||||||
|
|
||||||
|
if (priv->clickable)
|
||||||
|
size_allocate_button (title_bar, allocation, & available_width);
|
||||||
|
else
|
||||||
|
size_allocate_label (title_bar, allocation, & available_width);
|
||||||
|
|
||||||
|
label_allocation.x = allocation->x + width_before_icon - available_width - border_width;
|
||||||
|
label_allocation.y = allocation->y + border_width;
|
||||||
|
label_allocation.width = available_width - 2 * border_width;
|
||||||
|
label_allocation.height = allocation->height - 2 * border_width;
|
||||||
|
|
||||||
|
gtk_widget_size_allocate (priv->folder_bar_label, & label_allocation);
|
||||||
|
|
||||||
|
widget->allocation = *allocation;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -322,8 +367,9 @@ class_init (EShellFolderTitleBarClass *klass)
|
|||||||
object_class->destroy = destroy;
|
object_class->destroy = destroy;
|
||||||
|
|
||||||
widget_class = GTK_WIDGET_CLASS (klass);
|
widget_class = GTK_WIDGET_CLASS (klass);
|
||||||
widget_class->realize = realize;
|
widget_class->realize = realize;
|
||||||
widget_class->unrealize = unrealize;
|
widget_class->unrealize = unrealize;
|
||||||
|
widget_class->size_allocate = size_allocate;
|
||||||
|
|
||||||
parent_class = gtk_type_class (PARENT_TYPE);
|
parent_class = gtk_type_class (PARENT_TYPE);
|
||||||
|
|
||||||
@ -345,14 +391,13 @@ init (EShellFolderTitleBar *shell_folder_title_bar)
|
|||||||
|
|
||||||
priv = g_new (EShellFolderTitleBarPrivate, 1);
|
priv = g_new (EShellFolderTitleBarPrivate, 1);
|
||||||
|
|
||||||
priv->icon = NULL;
|
priv->icon = NULL;
|
||||||
priv->icon_widget = NULL;
|
priv->icon_widget = NULL;
|
||||||
priv->hbox = NULL;
|
priv->label = NULL;
|
||||||
priv->label = NULL;
|
priv->folder_bar_label = NULL;
|
||||||
priv->folder_bar_label = NULL;
|
priv->button_label = NULL;
|
||||||
priv->button_label = NULL;
|
priv->button = NULL;
|
||||||
priv->button = NULL;
|
priv->button_arrow = NULL;
|
||||||
priv->button_arrow = NULL;
|
|
||||||
|
|
||||||
priv->clickable = TRUE;
|
priv->clickable = TRUE;
|
||||||
|
|
||||||
@ -383,15 +428,15 @@ e_shell_folder_title_bar_construct (EShellFolderTitleBar *folder_title_bar)
|
|||||||
gtk_misc_set_padding (GTK_MISC (priv->label), 5, 0);
|
gtk_misc_set_padding (GTK_MISC (priv->label), 5, 0);
|
||||||
gtk_misc_set_alignment (GTK_MISC (priv->label), 0.0, 0.5);
|
gtk_misc_set_alignment (GTK_MISC (priv->label), 0.0, 0.5);
|
||||||
|
|
||||||
priv->folder_bar_label = e_clipped_label_new ("");
|
|
||||||
gtk_misc_set_alignment (GTK_MISC (priv->folder_bar_label), 1.0, 0.5);
|
|
||||||
gtk_widget_show (priv->folder_bar_label);
|
|
||||||
|
|
||||||
priv->button_label = e_clipped_label_new ("");
|
priv->button_label = e_clipped_label_new ("");
|
||||||
gtk_misc_set_padding (GTK_MISC (priv->button_label), 2, 0);
|
gtk_misc_set_padding (GTK_MISC (priv->button_label), 2, 0);
|
||||||
gtk_misc_set_alignment (GTK_MISC (priv->button_label), 0.0, 0.5);
|
gtk_misc_set_alignment (GTK_MISC (priv->button_label), 0.0, 0.5);
|
||||||
gtk_widget_show (priv->button_label);
|
gtk_widget_show (priv->button_label);
|
||||||
|
|
||||||
|
priv->folder_bar_label = e_clipped_label_new ("");
|
||||||
|
gtk_misc_set_alignment (GTK_MISC (priv->folder_bar_label), 1.0, 0.5);
|
||||||
|
gtk_widget_show (priv->folder_bar_label);
|
||||||
|
|
||||||
button_hbox = gtk_hbox_new (FALSE, 0);
|
button_hbox = gtk_hbox_new (FALSE, 0);
|
||||||
gtk_signal_connect (GTK_OBJECT (button_hbox), "realize",
|
gtk_signal_connect (GTK_OBJECT (button_hbox), "realize",
|
||||||
GTK_SIGNAL_FUNC (title_button_box_realize_cb), folder_title_bar);
|
GTK_SIGNAL_FUNC (title_button_box_realize_cb), folder_title_bar);
|
||||||
@ -404,11 +449,10 @@ e_shell_folder_title_bar_construct (EShellFolderTitleBar *folder_title_bar)
|
|||||||
GTK_WIDGET_UNSET_FLAGS (priv->button, GTK_CAN_FOCUS);
|
GTK_WIDGET_UNSET_FLAGS (priv->button, GTK_CAN_FOCUS);
|
||||||
gtk_widget_show (priv->button);
|
gtk_widget_show (priv->button);
|
||||||
|
|
||||||
priv->hbox = gtk_hbox_new (FALSE, 0);
|
gtk_container_set_border_width (GTK_CONTAINER (folder_title_bar), 2);
|
||||||
gtk_container_set_border_width (GTK_CONTAINER (priv->hbox), 2);
|
gtk_box_pack_start (GTK_BOX (folder_title_bar), priv->label, FALSE, FALSE, 0);
|
||||||
gtk_box_pack_start (GTK_BOX (priv->hbox), priv->label, TRUE, TRUE, 0);
|
gtk_box_pack_start (GTK_BOX (folder_title_bar), priv->button, FALSE, FALSE, 0);
|
||||||
gtk_box_pack_start (GTK_BOX (priv->hbox), priv->button, TRUE, TRUE, 0);
|
gtk_box_pack_start (GTK_BOX (folder_title_bar), priv->folder_bar_label, TRUE, TRUE, 0);
|
||||||
gtk_box_pack_start (GTK_BOX (priv->hbox), priv->folder_bar_label, FALSE, TRUE, 0);
|
|
||||||
|
|
||||||
/* Make the label have a border as large as the button's.
|
/* Make the label have a border as large as the button's.
|
||||||
FIXME: This is really hackish. The hardcoded numbers should be OK
|
FIXME: This is really hackish. The hardcoded numbers should be OK
|
||||||
@ -418,16 +462,9 @@ e_shell_folder_title_bar_construct (EShellFolderTitleBar *folder_title_bar)
|
|||||||
GTK_WIDGET (priv->button)->style->klass->xthickness + 3,
|
GTK_WIDGET (priv->button)->style->klass->xthickness + 3,
|
||||||
GTK_WIDGET (priv->button)->style->klass->ythickness + 1);
|
GTK_WIDGET (priv->button)->style->klass->ythickness + 1);
|
||||||
|
|
||||||
gtk_widget_show (priv->hbox);
|
|
||||||
|
|
||||||
gtk_signal_connect (GTK_OBJECT (priv->button), "toggled",
|
gtk_signal_connect (GTK_OBJECT (priv->button), "toggled",
|
||||||
GTK_SIGNAL_FUNC (title_button_toggled_cb), folder_title_bar);
|
GTK_SIGNAL_FUNC (title_button_toggled_cb), folder_title_bar);
|
||||||
|
|
||||||
gtk_container_add (GTK_CONTAINER (folder_title_bar), priv->hbox);
|
|
||||||
|
|
||||||
gtk_signal_connect (GTK_OBJECT (folder_title_bar), "style_set",
|
|
||||||
GTK_SIGNAL_FUNC (style_set_cb), NULL);
|
|
||||||
|
|
||||||
e_shell_folder_title_bar_set_title (folder_title_bar, NULL);
|
e_shell_folder_title_bar_set_title (folder_title_bar, NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -482,7 +519,7 @@ e_shell_folder_title_bar_set_title (EShellFolderTitleBar *folder_title_bar,
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* FIXME: There seems to be a bug in EClippedLabel, this is just a workaround. */
|
/* FIXME: There seems to be a bug in EClippedLabel, this is just a workaround. */
|
||||||
gtk_widget_queue_draw (GTK_WIDGET (folder_title_bar));
|
gtk_widget_queue_resize (GTK_WIDGET (folder_title_bar));
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -511,6 +548,8 @@ e_shell_folder_title_bar_set_folder_bar_label (EShellFolderTitleBar *folder_titl
|
|||||||
|
|
||||||
/* FIXME: Might want to set the styles somewhere in here too,
|
/* FIXME: Might want to set the styles somewhere in here too,
|
||||||
black text on grey background isn't the best combination */
|
black text on grey background isn't the best combination */
|
||||||
|
|
||||||
|
gtk_widget_queue_resize (GTK_WIDGET (folder_title_bar));
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -525,7 +564,6 @@ e_shell_folder_title_bar_set_icon (EShellFolderTitleBar *folder_title_bar,
|
|||||||
const GdkPixbuf *icon)
|
const GdkPixbuf *icon)
|
||||||
{
|
{
|
||||||
EShellFolderTitleBarPrivate *priv;
|
EShellFolderTitleBarPrivate *priv;
|
||||||
GdkPixmap *pixmap;
|
|
||||||
|
|
||||||
g_return_if_fail (icon != NULL);
|
g_return_if_fail (icon != NULL);
|
||||||
|
|
||||||
@ -535,13 +573,12 @@ e_shell_folder_title_bar_set_icon (EShellFolderTitleBar *folder_title_bar,
|
|||||||
priv = folder_title_bar->priv;
|
priv = folder_title_bar->priv;
|
||||||
|
|
||||||
gdk_pixbuf_ref ((GdkPixbuf *) icon);
|
gdk_pixbuf_ref ((GdkPixbuf *) icon);
|
||||||
if (priv->icon)
|
if (priv->icon != NULL)
|
||||||
gdk_pixbuf_unref (priv->icon);
|
gdk_pixbuf_unref (priv->icon);
|
||||||
priv->icon = (GdkPixbuf *) icon;
|
priv->icon = (GdkPixbuf *) icon;
|
||||||
|
|
||||||
pixmap = make_icon_pixmap (folder_title_bar, icon);
|
if (priv->icon != NULL)
|
||||||
|
add_icon_widget (folder_title_bar);
|
||||||
gtk_pixmap_set (GTK_PIXMAP (priv->icon_widget), pixmap, NULL);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -24,7 +24,7 @@
|
|||||||
#ifndef __E_SHELL_FOLDER_TITLE_BAR_H__
|
#ifndef __E_SHELL_FOLDER_TITLE_BAR_H__
|
||||||
#define __E_SHELL_FOLDER_TITLE_BAR_H__
|
#define __E_SHELL_FOLDER_TITLE_BAR_H__
|
||||||
|
|
||||||
#include <gtk/gtkeventbox.h>
|
#include <gtk/gtkhbox.h>
|
||||||
#include <gdk-pixbuf/gdk-pixbuf.h>
|
#include <gdk-pixbuf/gdk-pixbuf.h>
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
@ -44,13 +44,13 @@ typedef struct _EShellFolderTitleBarPrivate EShellFolderTitleBarPrivate;
|
|||||||
typedef struct _EShellFolderTitleBarClass EShellFolderTitleBarClass;
|
typedef struct _EShellFolderTitleBarClass EShellFolderTitleBarClass;
|
||||||
|
|
||||||
struct _EShellFolderTitleBar {
|
struct _EShellFolderTitleBar {
|
||||||
GtkEventBox parent;
|
GtkHBox parent;
|
||||||
|
|
||||||
EShellFolderTitleBarPrivate *priv;
|
EShellFolderTitleBarPrivate *priv;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct _EShellFolderTitleBarClass {
|
struct _EShellFolderTitleBarClass {
|
||||||
GtkEventBoxClass parent_class;
|
GtkHBoxClass parent_class;
|
||||||
|
|
||||||
/* Signals. */
|
/* Signals. */
|
||||||
void (* title_toggled) (EShellFolderTitleBar *folder_title_bar, gboolean pressed);
|
void (* title_toggled) (EShellFolderTitleBar *folder_title_bar, gboolean pressed);
|
||||||
@ -61,16 +61,16 @@ GtkType e_shell_folder_title_bar_get_type (void);
|
|||||||
void e_shell_folder_title_bar_construct (EShellFolderTitleBar *folder_title_bar);
|
void e_shell_folder_title_bar_construct (EShellFolderTitleBar *folder_title_bar);
|
||||||
GtkWidget *e_shell_folder_title_bar_new (void);
|
GtkWidget *e_shell_folder_title_bar_new (void);
|
||||||
|
|
||||||
void e_shell_folder_title_bar_set_title (EShellFolderTitleBar *folder_title_bar,
|
void e_shell_folder_title_bar_set_title (EShellFolderTitleBar *folder_title_bar,
|
||||||
const char *title);
|
const char *title);
|
||||||
void e_shell_folder_title_bar_set_folder_bar_label (EShellFolderTitleBar *folder_title_bar,
|
void e_shell_folder_title_bar_set_folder_bar_label (EShellFolderTitleBar *folder_title_bar,
|
||||||
const char *folder_bar_label);
|
const char *folder_bar_label);
|
||||||
void e_shell_folder_title_bar_set_icon (EShellFolderTitleBar *folder_title_bar,
|
void e_shell_folder_title_bar_set_icon (EShellFolderTitleBar *folder_title_bar,
|
||||||
const GdkPixbuf *icon);
|
const GdkPixbuf *icon);
|
||||||
void e_shell_folder_title_bar_set_toggle_state (EShellFolderTitleBar *folder_title_bar,
|
void e_shell_folder_title_bar_set_toggle_state (EShellFolderTitleBar *folder_title_bar,
|
||||||
gboolean state);
|
gboolean state);
|
||||||
void e_shell_folder_title_bar_set_clickable (EShellFolderTitleBar *folder_title_bar,
|
void e_shell_folder_title_bar_set_clickable (EShellFolderTitleBar *folder_title_bar,
|
||||||
gboolean clickable);
|
gboolean clickable);
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user