gedit r6778 - in trunk: . gedit
- From: jessevdk svn gnome org
- To: svn-commits-list gnome org
- Subject: gedit r6778 - in trunk: . gedit
- Date: Thu, 1 Jan 2009 15:06:45 +0000 (UTC)
Author: jessevdk
Date: Thu Jan 1 15:06:45 2009
New Revision: 6778
URL: http://svn.gnome.org/viewvc/gedit?rev=6778&view=rev
Log:
* gedit/gedit-window.c:
* gedit/gedit-status-combo-box.c:
Use non-relief button to represent the combo box like widget better
visually
Modified:
trunk/ChangeLog
trunk/gedit/gedit-status-combo-box.c
trunk/gedit/gedit-window.c
Modified: trunk/gedit/gedit-status-combo-box.c
==============================================================================
--- trunk/gedit/gedit-status-combo-box.c (original)
+++ trunk/gedit/gedit-status-combo-box.c Thu Jan 1 15:06:45 2009
@@ -29,6 +29,7 @@
struct _GeditStatusComboBoxPrivate
{
GtkWidget *frame;
+ GtkWidget *button;
GtkWidget *hbox;
GtkWidget *label;
GtkWidget *item;
@@ -60,8 +61,9 @@
gint *y,
gboolean *push_in,
GeditStatusComboBox *combo);
-static gboolean button_press_event (GtkWidget *widget,
- GdkEventButton *event);
+static void button_press_event (GtkWidget *widget,
+ GdkEventButton *event,
+ GeditStatusComboBox *combo);
static void item_activated (GtkMenuItem *item,
GeditStatusComboBox *combo);
@@ -126,69 +128,10 @@
}
}
-static gboolean
-expose_event (GtkWidget *widget,
- GdkEventExpose *event)
-{
- GtkAllocation *allocation;
- gboolean ret = FALSE;
-
- if (GTK_WIDGET_CLASS (gedit_status_combo_box_parent_class)->expose_event)
- ret = GTK_WIDGET_CLASS (gedit_status_combo_box_parent_class)->expose_event (widget, event);
-
- if (GTK_WIDGET_STATE (widget) != GTK_STATE_PRELIGHT)
- return ret;
-
- if (!GDK_IS_WINDOW (widget->window))
- return ret;
-
- allocation = &(widget->allocation);
- gtk_paint_shadow (widget->style,
- widget->window,
- GTK_WIDGET_STATE (widget),
- GTK_SHADOW_ETCHED_OUT,
- &(event->area),
- widget,
- NULL,
- 0,
- 0,
- allocation->width,
- allocation->height);
-
- return TRUE;
-}
-
-static gboolean
-leave_notify_event (GtkWidget *widget,
- GdkEventCrossing *event)
-{
- gboolean ret = FALSE;
-
- if (GTK_WIDGET_CLASS (gedit_status_combo_box_parent_class)->leave_notify_event)
- ret = GTK_WIDGET_CLASS (gedit_status_combo_box_parent_class)->leave_notify_event (widget, event);
-
- gtk_widget_set_state (widget, GTK_STATE_NORMAL);
- return ret;
-}
-
-static gboolean
-enter_notify_event (GtkWidget *widget,
- GdkEventCrossing *event)
-{
- gboolean ret = FALSE;
-
- if (GTK_WIDGET_CLASS (gedit_status_combo_box_parent_class)->enter_notify_event)
- ret = GTK_WIDGET_CLASS (gedit_status_combo_box_parent_class)->enter_notify_event (widget, event);
-
- gtk_widget_set_state (widget, GTK_STATE_PRELIGHT);
- return ret;
-}
-
static void
gedit_status_combo_box_class_init (GeditStatusComboBoxClass *klass)
{
GObjectClass *object_class = G_OBJECT_CLASS (klass);
- GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass);
object_class->finalize = gedit_status_combo_box_finalize;
object_class->get_property = gedit_status_combo_box_get_property;
@@ -196,11 +139,6 @@
klass->changed = gedit_status_combo_box_changed;
- widget_class->button_press_event = button_press_event;
- widget_class->expose_event = expose_event;
- widget_class->enter_notify_event = enter_notify_event;
- widget_class->leave_notify_event = leave_notify_event;
-
signals[CHANGED] =
g_signal_new ("changed",
G_OBJECT_CLASS_TYPE (object_class),
@@ -217,22 +155,45 @@
NULL,
G_PARAM_READWRITE));
+ /* Set up a style for the button to decrease spacing. */
+ gtk_rc_parse_string (
+ "style \"gedit-status-combo-button-style\"\n"
+ "{\n"
+ " GtkWidget::focus-padding = 0\n"
+ " GtkWidget::focus-line-width = 0\n"
+ " xthickness = 0\n"
+ " ythickness = 0\n"
+ "}\n"
+ "widget \"*.gedit-status-combo-button\" style \"gedit-status-combo-button-style\"");
+
g_type_class_add_private (object_class, sizeof(GeditStatusComboBoxPrivate));
}
static void
+menu_deactivate (GtkMenu *menu,
+ GeditStatusComboBox *combo)
+{
+ gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (combo->priv->button), FALSE);
+}
+
+static void
gedit_status_combo_box_init (GeditStatusComboBox *self)
{
GtkShadowType shadow_type;
GtkWidget *statusbar;
self->priv = GEDIT_STATUS_COMBO_BOX_GET_PRIVATE (self);
-
+
gtk_event_box_set_visible_window (GTK_EVENT_BOX (self), TRUE);
self->priv->frame = gtk_frame_new (NULL);
gtk_widget_show (self->priv->frame);
+ self->priv->button = gtk_toggle_button_new ();
+ gtk_widget_set_name (self->priv->button, "gedit-status-combo-button");
+ gtk_button_set_relief (GTK_BUTTON (self->priv->button), GTK_RELIEF_NONE);
+ gtk_widget_show (self->priv->button);
+
/* This is a hack needed to use the shadow type of a statusbar */
statusbar = gtk_statusbar_new ();
gtk_widget_ensure_style (statusbar);
@@ -242,11 +203,12 @@
gtk_widget_destroy (statusbar);
- self->priv->hbox = gtk_hbox_new (FALSE, 1);
+ self->priv->hbox = gtk_hbox_new (FALSE, 3);
gtk_widget_show (self->priv->hbox);
gtk_container_add (GTK_CONTAINER (self), self->priv->frame);
- gtk_container_add (GTK_CONTAINER (self->priv->frame), self->priv->hbox);
+ gtk_container_add (GTK_CONTAINER (self->priv->frame), self->priv->button);
+ gtk_container_add (GTK_CONTAINER (self->priv->button), self->priv->hbox);
self->priv->label = gtk_label_new ("");
gtk_widget_show (self->priv->label);
@@ -260,8 +222,7 @@
gtk_widget_show (self->priv->item);
gtk_label_set_single_line_mode (GTK_LABEL (self->priv->item), TRUE);
- gtk_misc_set_alignment (GTK_MISC (self->priv->item), 1.0, 0.5);
- gtk_label_set_ellipsize (GTK_LABEL (self->priv->item), PANGO_ELLIPSIZE_MIDDLE);
+ gtk_misc_set_alignment (GTK_MISC (self->priv->item), 0, 0.5);
gtk_box_pack_start (GTK_BOX (self->priv->hbox), self->priv->item, TRUE, TRUE, 0);
@@ -273,6 +234,16 @@
self->priv->menu = gtk_menu_new ();
g_object_ref_sink (self->priv->menu);
+
+ g_signal_connect (self->priv->button,
+ "button-press-event",
+ G_CALLBACK (button_press_event),
+ self);
+
+ g_signal_connect (self->priv->menu,
+ "deactivate",
+ G_CALLBACK (menu_deactivate),
+ self);
}
/* public functions */
@@ -371,18 +342,18 @@
}
/* callbacks */
-static gboolean
-button_press_event (GtkWidget *widget,
- GdkEventButton *event)
+static void
+button_press_event (GtkWidget *widget,
+ GdkEventButton *event,
+ GeditStatusComboBox *combo)
{
- GeditStatusComboBox *combo = GEDIT_STATUS_COMBO_BOX (widget);
GtkRequisition request;
gint max_height;
gtk_widget_size_request (combo->priv->menu, &request);
/* do something relative to our own height here, maybe we can do better */
- max_height = widget->allocation.height * 20;
+ max_height = GTK_WIDGET (combo)->allocation.height * 20;
if (request.height > max_height)
{
@@ -398,13 +369,13 @@
event->button,
event->time);
+ gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (combo->priv->button), TRUE);
+
if (combo->priv->current_item)
{
gtk_menu_shell_select_item (GTK_MENU_SHELL (combo->priv->menu),
combo->priv->current_item);
}
-
- return TRUE;
}
static void
@@ -420,9 +391,9 @@
gtk_widget_size_request (gtk_widget_get_toplevel (GTK_WIDGET (menu)), &request);
- /* use the label here to get the origin... */
+ /* get the origin... */
gdk_window_get_origin (GTK_WIDGET (combo)->window, x, y);
-
+
/* make the menu as wide as the widget */
if (request.width < GTK_WIDGET (combo)->allocation.width)
{
Modified: trunk/gedit/gedit-window.c
==============================================================================
--- trunk/gedit/gedit-window.c (original)
+++ trunk/gedit/gedit-window.c Thu Jan 1 15:06:45 2009
@@ -1852,7 +1852,6 @@
create_statusbar (GeditWindow *window,
GtkWidget *main_box)
{
- GtkLabel *label;
gedit_debug (DEBUG_WINDOW);
window->priv->statusbar = gedit_statusbar_new ();
@@ -1876,8 +1875,6 @@
TRUE,
0);
- label = gedit_status_combo_box_get_item_label (GEDIT_STATUS_COMBO_BOX (window->priv->tab_width_combo));
- gtk_label_set_width_chars (label, 2);
fill_tab_width_combo (window);
g_signal_connect (G_OBJECT (window->priv->tab_width_combo),
@@ -1893,9 +1890,6 @@
TRUE,
0);
- label = gedit_status_combo_box_get_item_label (GEDIT_STATUS_COMBO_BOX (window->priv->language_combo));
- gtk_label_set_width_chars (label, 12);
- gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.5);
fill_language_combo (window);
g_signal_connect (G_OBJECT (window->priv->language_combo),
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]