X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=src%2Fui%2Fgui%2Fcustomentry.c;h=7b3104693589d95d28aa03745d8811baa9b8e176;hb=c41cd1fefc98bb4abed33754276d93db9ffe2e0e;hp=762603f84ba16e02a004be58189e6130fbe279ba;hpb=75aeeafa67aa460512683311566a83917d399c70;p=pspp
diff --git a/src/ui/gui/customentry.c b/src/ui/gui/customentry.c
index 762603f84b..7b31046935 100644
--- a/src/ui/gui/customentry.c
+++ b/src/ui/gui/customentry.c
@@ -1,11 +1,9 @@
-/*
- PSPPIRE --- A Graphical User Interface for PSPP
- Copyright (C) 2005 Free Software Foundation
- Written by John Darrington
+/* PSPPIRE - a graphical user interface for PSPP.
+ Copyright (C) 2005, 2007 Free Software Foundation
- This program is free software; you can redistribute it and/or modify
+ This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 2 of the License, or
+ the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
@@ -14,13 +12,10 @@
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
- along with this program; if not, write to the Free Software
- Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
- 02110-1301, USA.
-*/
+ along with this program. If not, see . */
-/*
- This widget is a subclass of GtkEntry. It's an entry widget with a
+/*
+ This widget is a subclass of GtkEntry. It's an entry widget with a
button on the right hand side.
This code is heavily based upon the GtkSpinButton widget. Therefore
@@ -46,22 +41,19 @@
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- * Boston, MA 02111-1307, USA.
+ * License along with this library. If not, see
+ * .
*/
+
/*
* Modified by the GTK+ Team and others 1997-2000. See the AUTHORS
* file for a list of people on the GTK+ Team. See the ChangeLog
* files for a list of changes. These files are distributed with
- * GTK+ at ftp://ftp.gtk.org/pub/gtk/.
+ * GTK+ at ftp://ftp.gtk.org/pub/gtk/.
*/
#include
-#include
-#define _(msgid) gettext (msgid)
-
#include
#include
@@ -104,7 +96,7 @@ psppire_custom_entry_get_type (void)
(GInstanceInitFunc) psppire_custom_entry_init,
};
- ce_type = g_type_register_static (GTK_TYPE_ENTRY, "PsppireCustomEntry",
+ ce_type = g_type_register_static (GTK_TYPE_ENTRY, "PsppireCustomEntry",
&ce_info, 0);
}
@@ -154,14 +146,14 @@ psppire_custom_entry_realize (GtkWidget *widget)
GTK_WIDGET_CLASS (parent_class)->realize (widget);
widget->allocation.width = real_width;
-
+
attributes.window_type = GDK_WINDOW_CHILD;
attributes.wclass = GDK_INPUT_OUTPUT;
attributes.visual = gtk_widget_get_visual (widget);
attributes.colormap = gtk_widget_get_colormap (widget);
attributes.event_mask = gtk_widget_get_events (widget);
- attributes.event_mask |= GDK_EXPOSURE_MASK | GDK_BUTTON_PRESS_MASK
- | GDK_BUTTON_RELEASE_MASK | GDK_LEAVE_NOTIFY_MASK | GDK_ENTER_NOTIFY_MASK
+ attributes.event_mask |= GDK_EXPOSURE_MASK | GDK_BUTTON_PRESS_MASK
+ | GDK_BUTTON_RELEASE_MASK | GDK_LEAVE_NOTIFY_MASK | GDK_ENTER_NOTIFY_MASK
| GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK;
attributes_mask = GDK_WA_X | GDK_WA_Y | GDK_WA_VISUAL | GDK_WA_COLORMAP;
@@ -173,8 +165,8 @@ psppire_custom_entry_realize (GtkWidget *widget)
widget->requisition.height) / 2;
attributes.width = button_size + 2 * widget->style->xthickness;
attributes.height = widget->requisition.height;
-
- custom_entry->panel = gdk_window_new (gtk_widget_get_parent_window (widget),
+
+ custom_entry->panel = gdk_window_new (gtk_widget_get_parent_window (widget),
&attributes, attributes_mask);
gdk_window_set_user_data (custom_entry->panel, widget);
@@ -190,7 +182,7 @@ psppire_custom_entry_realize (GtkWidget *widget)
static gint
psppire_custom_entry_get_button_width (PsppireCustomEntry *custom_entry)
{
- const gint size = pango_font_description_get_size
+ const gint size = pango_font_description_get_size
(GTK_WIDGET (custom_entry)->style->font_desc);
gint button_width = MAX (PANGO_PIXELS (size), MIN_BUTTON_WIDTH);
@@ -201,10 +193,10 @@ psppire_custom_entry_get_button_width (PsppireCustomEntry *custom_entry)
/**
* custom_entry_get_shadow_type:
* @custom_entry: a #PsppireCustomEntry
- *
+ *
* Convenience function to Get the shadow type from the underlying widget's
* style.
- *
+ *
* Return value: the #GtkShadowType
**/
static gint
@@ -250,20 +242,21 @@ psppire_custom_entry_redraw (PsppireCustomEntry *custom_entry)
*/
gdk_window_invalidate_rect (custom_entry->panel, NULL, TRUE);
}
-}
+}
static gint
psppire_custom_entry_expose (GtkWidget *widget,
GdkEventExpose *event)
{
- PsppireCustomEntry *ce = PSPPIRE_CUSTOM_ENTRY(widget);
+ PsppireCustomEntry *ce = PSPPIRE_CUSTOM_ENTRY (widget);
g_return_val_if_fail (PSPPIRE_IS_CUSTOM_ENTRY (widget), FALSE);
g_return_val_if_fail (event != NULL, FALSE);
if (GTK_WIDGET_DRAWABLE (widget))
{
+ gboolean is_editable;
GtkShadowType shadow_type;
GdkRectangle rect;
@@ -275,19 +268,19 @@ psppire_custom_entry_expose (GtkWidget *widget,
gdk_drawable_get_size (ce->panel, &rect.width, &rect.height);
- gdk_window_begin_paint_rect (ce->panel, &rect);
+ gdk_window_begin_paint_rect (ce->panel, &rect);
shadow_type = psppire_custom_entry_get_shadow_type (ce);
-
- if (shadow_type != GTK_SHADOW_NONE)
- {
- gtk_paint_box (widget->style, ce->panel,
- GTK_STATE_NORMAL, shadow_type,
- NULL, widget, "customentry",
- rect.x, rect.y, rect.width, rect.height);
- }
+ g_object_get (widget, "editable", &is_editable, NULL);
+
+ gtk_paint_box (widget->style, ce->panel,
+ is_editable ? GTK_STATE_NORMAL: GTK_STATE_INSENSITIVE,
+ shadow_type,
+ NULL, widget, "customentry",
+ rect.x, rect.y, rect.width, rect.height);
+
gdk_window_end_paint (ce->panel);
}
@@ -331,24 +324,24 @@ psppire_custom_entry_class_init (PsppireCustomEntryClass *klass)
widget_class->size_allocate = psppire_custom_entry_size_allocate;
- gtk_widget_class_install_style_property_parser
+ gtk_widget_class_install_style_property_parser
(widget_class,
- g_param_spec_enum ("shadow_type",
- "Shadow Type",
- _("Style of bevel around the custom entry button"),
+ g_param_spec_enum ("shadow_type",
+ "Shadow Type",
+ "Style of bevel around the custom entry button",
GTK_TYPE_SHADOW_TYPE,
GTK_SHADOW_ETCHED_IN,
G_PARAM_READABLE),
gtk_rc_property_parse_enum);
- custom_entry_signals[CLICKED] =
+ custom_entry_signals[CLICKED] =
g_signal_new ("clicked",
- G_TYPE_FROM_CLASS(gobject_class),
+ G_TYPE_FROM_CLASS (gobject_class),
G_SIGNAL_RUN_LAST,
0,
NULL, NULL,
g_cclosure_marshal_VOID__VOID,
- G_TYPE_NONE,
+ G_TYPE_NONE,
0);
@@ -375,10 +368,13 @@ psppire_custom_entry_button_press (GtkWidget *widget,
if (event->window == ce->panel)
{
+ gboolean is_editable ;
if (!GTK_WIDGET_HAS_FOCUS (widget))
gtk_widget_grab_focus (widget);
- if ( event->button == 1)
+ g_object_get (ce, "editable", &is_editable, NULL);
+
+ if ( event->button == 1 && is_editable )
g_signal_emit (widget, custom_entry_signals[CLICKED], 0);
}
@@ -404,11 +400,11 @@ psppire_custom_entry_size_allocate (GtkWidget *widget,
g_return_if_fail (allocation != NULL);
ce = PSPPIRE_CUSTOM_ENTRY (widget);
- button_width = psppire_custom_entry_get_button_width(ce);
+ button_width = psppire_custom_entry_get_button_width (ce);
panel_width = button_width + 2 * widget->style->xthickness;
-
+
widget->allocation = *allocation;
-
+
entry_allocation = *allocation;
entry_allocation.width -= panel_width;
@@ -432,11 +428,11 @@ psppire_custom_entry_size_allocate (GtkWidget *widget,
if (GTK_WIDGET_REALIZED (widget))
{
- gdk_window_move_resize (PSPPIRE_CUSTOM_ENTRY (widget)->panel,
+ gdk_window_move_resize (PSPPIRE_CUSTOM_ENTRY (widget)->panel,
panel_allocation.x,
panel_allocation.y,
panel_allocation.width,
- panel_allocation.height);
+ panel_allocation.height);
}
psppire_custom_entry_redraw (ce);