GtkTextDirection previous_direction);
static void gtk_widget_real_grab_focus (GtkWidget *focus_widget);
-static void gtk_widget_real_show_help (GtkWidget *widget,
+static gboolean gtk_widget_real_show_help (GtkWidget *widget,
GtkWidgetHelpType help_type);
static void gtk_widget_dispatch_child_properties_changed (GtkWidget *object,
G_TYPE_BOOLEAN, 1,
GDK_TYPE_EVENT | G_SIGNAL_TYPE_STATIC_SCOPE);
widget_signals[POPUP_MENU] =
- gtk_signal_new ("popup_menu",
- GTK_RUN_LAST | GTK_RUN_ACTION,
- GTK_CLASS_TYPE (object_class),
- GTK_SIGNAL_OFFSET (GtkWidgetClass, popup_menu),
- _gtk_marshal_NONE__NONE,
- GTK_TYPE_NONE, 0);
+ g_signal_new ("popup_menu",
+ G_TYPE_FROM_CLASS (object_class),
+ G_SIGNAL_RUN_LAST | G_SIGNAL_ACTION,
+ GTK_SIGNAL_OFFSET (GtkWidgetClass, popup_menu),
+ _gtk_boolean_handled_accumulator, NULL,
+ _gtk_marshal_BOOLEAN__VOID,
+ G_TYPE_BOOLEAN, 0);
widget_signals[SHOW_HELP] =
- gtk_signal_new ("show_help",
- GTK_RUN_LAST | GTK_RUN_ACTION,
- GTK_CLASS_TYPE (object_class),
- GTK_SIGNAL_OFFSET (GtkWidgetClass, show_help),
- _gtk_marshal_NONE__ENUM,
- GTK_TYPE_NONE, 1, GTK_TYPE_WIDGET_HELP_TYPE);
+ g_signal_new ("show_help",
+ G_TYPE_FROM_CLASS (object_class),
+ G_SIGNAL_RUN_LAST | G_SIGNAL_ACTION,
+ GTK_SIGNAL_OFFSET (GtkWidgetClass, show_help),
+ _gtk_boolean_handled_accumulator, NULL,
+ _gtk_marshal_BOOLEAN__ENUM,
+ G_TYPE_BOOLEAN, 1, GTK_TYPE_WIDGET_HELP_TYPE);
widget_signals[ACCEL_CLOSURES_CHANGED] =
gtk_signal_new ("accel_closures_changed",
0,
_("Width, in pixels, between focus indicator and the widget 'box'."),
0, G_MAXINT, 1,
G_PARAM_READWRITE));
-
+ gtk_widget_class_install_style_property (klass,
+ g_param_spec_boxed ("cursor-color",
+ _("Cursor color"),
+ _("Color with which to draw insertion cursor"),
+ GDK_TYPE_COLOR,
+ G_PARAM_READABLE));
+ gtk_widget_class_install_style_property (klass,
+ g_param_spec_float ("cursor-aspect-ratio",
+ _("Cursor line aspect ratio"),
+ _("Aspect ratio with which to draw insertion cursor"),
+ 0.0, 1.0, 0.033,
+ G_PARAM_READABLE));
}
static void
const GValue *value,
GParamSpec *pspec)
{
- GtkWidget *widget;
-
- widget = GTK_WIDGET (object);
+ GtkWidget *widget = GTK_WIDGET (object);
switch (prop_id)
{
GValue *value,
GParamSpec *pspec)
{
- GtkWidget *widget;
-
- widget = GTK_WIDGET (object);
+ GtkWidget *widget = GTK_WIDGET (object);
switch (prop_id)
{
GTK_DOUBLE_BUFFERED);
GTK_PRIVATE_SET_FLAG (widget, GTK_REDRAW_ON_ALLOC);
+ GTK_PRIVATE_SET_FLAG (widget, GTK_REQUEST_NEEDED);
+ GTK_PRIVATE_SET_FLAG (widget, GTK_ALLOC_NEEDED);
widget->style = gtk_widget_get_default_style ();
g_object_ref (widget->style);
static void
gtk_widget_real_show (GtkWidget *widget)
{
- g_return_if_fail (GTK_IS_WIDGET (widget));
-
if (!GTK_WIDGET_VISIBLE (widget))
{
GTK_WIDGET_SET_FLAGS (widget, GTK_VISIBLE);
{
gtk_widget_ref (widget);
gtk_signal_emit (GTK_OBJECT (widget), widget_signals[HIDE]);
- if (!GTK_WIDGET_TOPLEVEL (widget) && GTK_WIDGET_REALIZED (widget))
+ if (!GTK_WIDGET_TOPLEVEL (widget))
gtk_widget_queue_resize (widget);
g_object_notify (G_OBJECT (widget), "visible");
gtk_widget_unref (widget);
static void
gtk_widget_real_hide (GtkWidget *widget)
{
- g_return_if_fail (GTK_IS_WIDGET (widget));
-
if (GTK_WIDGET_VISIBLE (widget))
{
GTK_WIDGET_UNSET_FLAGS (widget, GTK_VISIBLE);
*
* Utility function; intended to be connected to the "delete_event"
* signal on a #GtkWindow. The function calls gtk_widget_hide() on its
- * argument, then returns %TRUE. If connected to "delete_event",
- * the result is that clicking the window manager close button for
- * will hide but not destroy the window. By default, GTK+ destroys
- * windows when "delete_event" is received.
+ * argument, then returns %TRUE. If connected to "delete_event", the
+ * result is that clicking the close button for a window (on the
+ * window frame, top right corner usually) will hide but not destroy
+ * the window. By default, GTK+ destroys windows when "delete_event"
+ * is received.
*
* Return value: %TRUE
**/
gtk_widget_real_size_allocate (GtkWidget *widget,
GtkAllocation *allocation)
{
- g_return_if_fail (GTK_IS_WIDGET (widget));
-
widget->allocation = *allocation;
if (GTK_WIDGET_REALIZED (widget) &&
* @accel_mods: modifier key combination of the accelerator
* @accel_flags: flag accelerators, e.g. %GTK_ACCEL_VISIBLE
*
- * Installs an accelerator for this @widget in @accel_group, that causes
+ * Installs an accelerator for this @widget in @accel_group that causes
* @accel_signal to be emitted if the accelerator is activated.
* The @accel_group needs to be added to the widget's toplevel via
* gtk_window_add_accel_group(), and the signal must be of type %G_RUN_ACTION.
* Accelerators added through this function are not user changeable during
* runtime. If you want to support accelerators that can be changed by the
- * user, use gtk_accel_map_add_entry() and gtk_menu_item_set_accel_path()
- * instead.
+ * user, use gtk_accel_map_add_entry() and gtk_widget_set_accel_path() or
+ * gtk_menu_item_set_accel_path() instead.
*/
void
-gtk_widget_add_accelerator (GtkWidget *widget,
- const gchar *accel_signal,
- GtkAccelGroup *accel_group,
- guint accel_key,
- guint accel_mods,
- GtkAccelFlags accel_flags)
+gtk_widget_add_accelerator (GtkWidget *widget,
+ const gchar *accel_signal,
+ GtkAccelGroup *accel_group,
+ guint accel_key,
+ GdkModifierType accel_mods,
+ GtkAccelFlags accel_flags)
{
GClosure *closure;
GSignalQuery query;
* gtk_widget_add_accelerator().
*/
gboolean
-gtk_widget_remove_accelerator (GtkWidget *widget,
- GtkAccelGroup *accel_group,
- guint accel_key,
- guint accel_mods)
+gtk_widget_remove_accelerator (GtkWidget *widget,
+ GtkAccelGroup *accel_group,
+ guint accel_key,
+ GdkModifierType accel_mods)
{
GtkAccelGroupEntry *ag_entry;
GList *slist, *clist;
g_free (apath);
}
-/* accel_group: the accel group used to activate this widget
- * accel_path: the accel path, associating the accelerator
- * to activate this widget
- * set accel path through which this widget can be actiavated.
- */
+
+/**
+ * gtk_widget_set_accel_path:
+ * @widget: a #GtkWidget
+ * @accel_path: path used to look up the the accelerator
+ * @accel_group: a #GtkAccelGroup.
+ *
+ * Given an accelerator group, @accel_group, and an accelerator path,
+ * @accel_path, sets up an accelerator in @accel_group so whenever the
+ * key binding that is defined for @accel_path is pressed, @widget
+ * will be activated. This removes any accelerators (for any
+ * accelerator group) installed by previous calls to
+ * gtk_widget_set_accel_path(). Associating accelerators with
+ * paths allows them to be modified by the user and the modifications
+ * to be saved for future use. (See gtk_accel_map_save().)
+ *
+ * This function is a low level function that would most likely
+ * be used by a menu creation system like #GtkItemFactory. If you
+ * use #GtkItemFactory, setting up accelerator paths will be done
+ * automatically.
+ *
+ * Even when you you aren't using #GtkItemFactory, if you only want to
+ * set up accelerators on menu items gtk_menu_item_set_accel_path()
+ * provides a somewhat more convenient interface.
+ **/
void
-_gtk_widget_set_accel_path (GtkWidget *widget,
- const gchar *accel_path,
- GtkAccelGroup *accel_group)
+gtk_widget_set_accel_path (GtkWidget *widget,
+ const gchar *accel_path,
+ GtkAccelGroup *accel_group)
{
AccelPath *apath;
gtk_widget_real_key_press_event (GtkWidget *widget,
GdkEventKey *event)
{
- gboolean handled = FALSE;
-
- g_return_val_if_fail (GTK_IS_WIDGET (widget), handled);
- g_return_val_if_fail (event != NULL, handled);
-
- if (!handled)
- handled = gtk_bindings_activate (GTK_OBJECT (widget),
- event->keyval,
- event->state);
-
- return handled;
+ return _gtk_bindings_activate_event (GTK_OBJECT (widget), event);
}
static gboolean
gtk_widget_real_key_release_event (GtkWidget *widget,
GdkEventKey *event)
{
- gboolean handled = FALSE;
-
- g_return_val_if_fail (GTK_IS_WIDGET (widget), handled);
- g_return_val_if_fail (event != NULL, handled);
-
- if (!handled)
- handled = gtk_bindings_activate (GTK_OBJECT (widget),
- event->keyval,
- event->state | GDK_RELEASE_MASK);
-
- return handled;
+ return _gtk_bindings_activate_event (GTK_OBJECT (widget), event);
}
static gboolean
gtk_widget_real_focus_in_event (GtkWidget *widget,
GdkEventFocus *event)
{
- GTK_WIDGET_SET_FLAGS (widget, GTK_HAS_FOCUS);
gtk_widget_queue_draw (widget);
return FALSE;
gtk_widget_real_focus_out_event (GtkWidget *widget,
GdkEventFocus *event)
{
- GTK_WIDGET_UNSET_FLAGS (widget, GTK_HAS_FOCUS);
gtk_widget_queue_draw (widget);
return FALSE;
}
+#define WIDGET_REALIZED_FOR_EVENT(widget, event) \
+ (event->type == GDK_FOCUS_CHANGE || GTK_WIDGET_REALIZED(widget))
+
/**
* gtk_widget_event:
* @widget: a #GtkWidget
GdkEvent *event)
{
g_return_val_if_fail (GTK_IS_WIDGET (widget), TRUE);
- g_return_val_if_fail (GTK_WIDGET_REALIZED (widget), TRUE);
+ g_return_val_if_fail (WIDGET_REALIZED_FOR_EVENT (widget, event), TRUE);
if (event->type == GDK_EXPOSE)
{
gtk_widget_ref (widget);
gtk_signal_emit (GTK_OBJECT (widget), widget_signals[EVENT], event, &return_val);
- return_val |= !GTK_WIDGET_REALIZED (widget);
+ return_val |= !WIDGET_REALIZED_FOR_EVENT (widget, event);
if (!return_val)
{
gint signal_num;
if (signal_num != -1)
gtk_signal_emit (GTK_OBJECT (widget), widget_signals[signal_num], event, &return_val);
}
- if (GTK_WIDGET_REALIZED (widget))
+ if (WIDGET_REALIZED_FOR_EVENT (widget, event))
gtk_signal_emit (GTK_OBJECT (widget), widget_signals[EVENT_AFTER], event);
else
return_val = TRUE;
gtk_widget_reparent_container_child (GtkWidget *widget,
gpointer client_data)
{
- g_return_if_fail (GTK_IS_WIDGET (widget));
g_return_if_fail (client_data != NULL);
if (GTK_WIDGET_NO_WINDOW (widget))
gtk_widget_reparent_container_child (widget,
gtk_widget_get_parent_window (widget));
}
+
+ g_object_notify (G_OBJECT (widget), "parent");
}
}
{
g_return_if_fail (GTK_IS_WIDGET (widget));
+ if (!GTK_WIDGET_IS_SENSITIVE (widget))
+ return;
+
g_object_ref (G_OBJECT (widget));
gtk_signal_emit (GTK_OBJECT (widget), widget_signals[GRAB_FOCUS]);
g_object_notify (G_OBJECT (widget), "has_focus");
static void
gtk_widget_real_grab_focus (GtkWidget *focus_widget)
{
- g_return_if_fail (GTK_IS_WIDGET (focus_widget));
-
if (GTK_WIDGET_CAN_FOCUS (focus_widget))
{
GtkWidget *toplevel;
}
}
-static void
+static gboolean
gtk_widget_real_show_help (GtkWidget *widget,
GtkWidgetHelpType help_type)
{
if (help_type == GTK_WIDGET_HELP_TOOLTIP)
- _gtk_tooltips_show_tip (widget);
+ {
+ _gtk_tooltips_toggle_keyboard_mode (widget);
+ return TRUE;
+ }
+ else
+ return FALSE;
}
static gboolean
window = gtk_widget_get_toplevel (widget);
if (window && GTK_WIDGET_TOPLEVEL (window))
- gtk_window_set_default (GTK_WINDOW (window), widget);
+ {
+ gtk_window_set_default (GTK_WINDOW (window), widget);
+ g_object_notify (G_OBJECT (widget), "has_default");
+ }
else
g_warning (G_STRLOC ": widget not within a GtkWindow");
}
{
GtkRcStyle *old_style;
+ g_return_if_fail (GTK_IS_WIDGET (widget));
g_return_if_fail (GTK_IS_RC_STYLE (style));
old_style = gtk_object_get_data_by_id (GTK_OBJECT (widget),
{
GtkRcStyle *rc_style;
+ g_return_val_if_fail (GTK_IS_WIDGET (widget), NULL);
+
rc_style = gtk_object_get_data_by_id (GTK_OBJECT (widget),
quark_rc_style);
GtkStyle *style,
gboolean initial_emission)
{
- g_return_if_fail (GTK_IS_WIDGET (widget));
- g_return_if_fail (style != NULL);
-
g_object_ref (G_OBJECT (widget));
g_object_freeze_notify (G_OBJECT (widget));
void
gtk_widget_push_colormap (GdkColormap *cmap)
{
- g_return_if_fail (cmap != NULL);
+ g_return_if_fail (GDK_IS_COLORMAP (cmap));
colormap_stack = g_slist_prepend (colormap_stack, cmap);
}
void
gtk_widget_set_default_colormap (GdkColormap *colormap)
{
+ g_return_if_fail (GDK_IS_COLORMAP (colormap));
+
if (default_colormap != colormap)
{
if (default_colormap)
static void
gtk_widget_real_destroy (GtkObject *object)
{
- GtkWidget *widget;
-
- /* gtk_object_destroy() will already hold a refcount on object
- */
- widget = GTK_WIDGET (object);
+ /* gtk_object_destroy() will already hold a refcount on object */
+ GtkWidget *widget = GTK_WIDGET (object);
/* wipe accelerator closures (keep order) */
g_object_set_qdata (G_OBJECT (widget), quark_accel_path, NULL);
static void
gtk_widget_real_map (GtkWidget *widget)
{
- g_return_if_fail (GTK_IS_WIDGET (widget));
g_return_if_fail (GTK_WIDGET_REALIZED (widget) == TRUE);
if (!GTK_WIDGET_MAPPED (widget))
static void
gtk_widget_real_unmap (GtkWidget *widget)
{
- g_return_if_fail (GTK_IS_WIDGET (widget));
-
if (GTK_WIDGET_MAPPED (widget))
{
GTK_WIDGET_UNSET_FLAGS (widget, GTK_MAPPED);
static void
gtk_widget_real_realize (GtkWidget *widget)
{
- g_return_if_fail (GTK_IS_WIDGET (widget));
g_return_if_fail (GTK_WIDGET_NO_WINDOW (widget));
GTK_WIDGET_SET_FLAGS (widget, GTK_REALIZED);
static void
gtk_widget_real_unrealize (GtkWidget *widget)
{
- g_return_if_fail (GTK_IS_WIDGET (widget));
-
if (GTK_WIDGET_MAPPED (widget))
gtk_widget_real_unmap (widget);
gtk_widget_real_size_request (GtkWidget *widget,
GtkRequisition *requisition)
{
- g_return_if_fail (GTK_IS_WIDGET (widget));
-
requisition->width = widget->requisition.width;
requisition->height = widget->requisition.height;
}
static void
gtk_widget_aux_info_destroy (GtkWidgetAuxInfo *aux_info)
{
- g_return_if_fail (aux_info != NULL);
-
g_mem_chunk_free (aux_info_mem_chunk, aux_info);
}
g_free (requisition);
}
+GType
+gtk_requisition_get_type (void)
+{
+ static GType our_type = 0;
+
+ if (our_type == 0)
+ our_type = g_boxed_type_register_static ("GtkTypeRequisition",
+ (GBoxedCopyFunc) gtk_requisition_copy,
+ (GBoxedFreeFunc) gtk_requisition_free);
+
+ return our_type;
+}
+
AtkObject*
gtk_widget_get_accessible (GtkWidget *widget)
{
g_object_ref (G_OBJECT (accessible));
return accessible;
}
-