]> Pileus Git - ~andy/gtk/blobdiff - gtk/gtkcellrendereraccel.c
Fixing GtkCellAreaBox to rebuild groups when align/expand child properties change.
[~andy/gtk] / gtk / gtkcellrendereraccel.c
index e66ab2bcf09aa6e02fd0319db00db341871eaa6c..f18ce56d5169ff9a181f02395e0dd9bf2bec439f 100644 (file)
  */
 
 #include "config.h"
+
+#include "gtkcellrendereraccel.h"
+
+#include "gdk/gdkkeysyms.h"
+
 #include "gtkintl.h"
 #include "gtkaccelgroup.h"
 #include "gtkmarshalers.h"
-#include "gtkcellrendereraccel.h"
 #include "gtklabel.h"
 #include "gtkeventbox.h"
 #include "gtkmain.h"
+#include "gtksizerequest.h"
 #include "gtkprivate.h"
-#include "gdk/gdkkeysyms.h"
 
 
 static void gtk_cell_renderer_accel_get_property (GObject         *object,
@@ -37,21 +41,21 @@ static void gtk_cell_renderer_accel_set_property (GObject         *object,
                                                   guint            param_id,
                                                   const GValue    *value,
                                                   GParamSpec      *pspec);
-static void gtk_cell_renderer_accel_get_size     (GtkCellRenderer *cell,
-                                                  GtkWidget       *widget,
-                                                  GdkRectangle    *cell_area,
-                                                  gint            *x_offset,
-                                                  gint            *y_offset,
-                                                  gint            *width,
-                                                  gint            *height);
+static void gtk_cell_renderer_accel_get_size     (GtkCellRenderer    *cell,
+                                                  GtkWidget          *widget,
+                                                  const GdkRectangle *cell_area,
+                                                  gint               *x_offset,
+                                                  gint               *y_offset,
+                                                  gint               *width,
+                                                  gint               *height);
 static GtkCellEditable *
-           gtk_cell_renderer_accel_start_editing (GtkCellRenderer *cell,
-                                                  GdkEvent        *event,
-                                                  GtkWidget       *widget,
-                                                  const gchar     *path,
-                                                  GdkRectangle    *background_area,
-                                                  GdkRectangle    *cell_area,
-                                                  GtkCellRendererState flags);
+           gtk_cell_renderer_accel_start_editing (GtkCellRenderer      *cell,
+                                                  GdkEvent             *event,
+                                                  GtkWidget            *widget,
+                                                  const gchar          *path,
+                                                  const GdkRectangle   *background_area,
+                                                  const GdkRectangle   *cell_area,
+                                                  GtkCellRendererState  flags);
 static gchar *convert_keysym_state_to_string     (GtkCellRendererAccel *accel,
                                                   guint                 keysym,
                                                   GdkModifierType       mask,
@@ -71,7 +75,7 @@ enum {
   PROP_ACCEL_MODE
 };
 
-struct _GtkCellRendererAccelPriv
+struct _GtkCellRendererAccelPrivate
 {
   GtkCellRendererAccelMode accel_mode;
 
@@ -99,7 +103,7 @@ gtk_cell_renderer_accel_init (GtkCellRendererAccel *cell_accel)
 
   cell_accel->priv = G_TYPE_INSTANCE_GET_PRIVATE (cell_accel,
                                                   GTK_TYPE_CELL_RENDERER_ACCEL,
-                                                  GtkCellRendererAccelPriv);
+                                                  GtkCellRendererAccelPrivate);
 
   text = convert_keysym_state_to_string (cell_accel, 0, 0, 0);
   g_object_set (cell_accel, "text", text, NULL);
@@ -234,7 +238,7 @@ gtk_cell_renderer_accel_class_init (GtkCellRendererAccelClass *cell_accel_class)
                                         G_TYPE_NONE, 1,
                                         G_TYPE_STRING);
 
-  g_type_class_add_private (cell_accel_class, sizeof (GtkCellRendererAccelPriv));
+  g_type_class_add_private (cell_accel_class, sizeof (GtkCellRendererAccelPrivate));
 }
 
 
@@ -259,7 +263,7 @@ convert_keysym_state_to_string (GtkCellRendererAccel *accel,
                                 GdkModifierType       mask,
                                guint                 keycode)
 {
-  GtkCellRendererAccelPriv *priv = accel->priv;
+  GtkCellRendererAccelPrivate *priv = accel->priv;
 
   if (keysym == 0 && keycode == 0)
     /* This label is displayed in a treeview cell displaying
@@ -307,7 +311,7 @@ gtk_cell_renderer_accel_get_property  (GObject    *object,
                                        GValue     *value,
                                        GParamSpec *pspec)
 {
-  GtkCellRendererAccelPriv *priv = GTK_CELL_RENDERER_ACCEL (object)->priv;
+  GtkCellRendererAccelPrivate *priv = GTK_CELL_RENDERER_ACCEL (object)->priv;
 
   switch (param_id)
     {
@@ -339,7 +343,7 @@ gtk_cell_renderer_accel_set_property  (GObject      *object,
                                        GParamSpec   *pspec)
 {
   GtkCellRendererAccel *accel = GTK_CELL_RENDERER_ACCEL (object);
-  GtkCellRendererAccelPriv *priv = accel->priv;
+  GtkCellRendererAccelPrivate *priv = accel->priv;
   gboolean changed = FALSE;
 
   switch (param_id)
@@ -398,22 +402,22 @@ gtk_cell_renderer_accel_set_property  (GObject      *object,
 }
 
 static void
-gtk_cell_renderer_accel_get_size (GtkCellRenderer *cell,
-                                  GtkWidget       *widget,
-                                  GdkRectangle    *cell_area,
-                                  gint            *x_offset,
-                                  gint            *y_offset,
-                                  gint            *width,
-                                  gint            *height)
+gtk_cell_renderer_accel_get_size (GtkCellRenderer    *cell,
+                                  GtkWidget          *widget,
+                                  const GdkRectangle *cell_area,
+                                  gint               *x_offset,
+                                  gint               *y_offset,
+                                  gint               *width,
+                                  gint               *height)
 
 {
-  GtkCellRendererAccelPriv *priv = GTK_CELL_RENDERER_ACCEL (cell)->priv;
+  GtkCellRendererAccelPrivate *priv = GTK_CELL_RENDERER_ACCEL (cell)->priv;
   GtkRequisition requisition;
 
   if (priv->sizing_label == NULL)
     priv->sizing_label = gtk_label_new (_("New accelerator..."));
 
-  gtk_widget_size_request (priv->sizing_label, &requisition);
+  gtk_widget_get_preferred_size (priv->sizing_label, &requisition, NULL);
 
   GTK_CELL_RENDERER_CLASS (gtk_cell_renderer_accel_parent_class)->get_size (cell, widget, cell_area,
                                                                             x_offset, y_offset, width, height);
@@ -430,7 +434,7 @@ grab_key_callback (GtkWidget            *widget,
                    GdkEventKey          *event,
                    GtkCellRendererAccel *accel)
 {
-  GtkCellRendererAccelPriv *priv = accel->priv;
+  GtkCellRendererAccelPrivate *priv = accel->priv;
   GdkModifierType accel_mods = 0;
   guint accel_key;
   gchar *path;
@@ -454,8 +458,8 @@ grab_key_callback (GtkWidget            *widget,
                                       NULL, NULL, NULL, &consumed_modifiers);
 
   accel_key = gdk_keyval_to_lower (event->keyval);
-  if (accel_key == GDK_ISO_Left_Tab) 
-    accel_key = GDK_Tab;
+  if (accel_key == GDK_KEY_ISO_Left_Tab) 
+    accel_key = GDK_KEY_Tab;
 
   accel_mods = event->state & gtk_accelerator_get_default_mod_mask ();
 
@@ -473,9 +477,9 @@ grab_key_callback (GtkWidget            *widget,
     {
       switch (event->keyval)
        {
-       case GDK_Escape:
+       case GDK_KEY_Escape:
          goto out; /* cancel */
-       case GDK_BackSpace:
+       case GDK_KEY_BackSpace:
          /* clear the accelerator on Backspace */
          cleared = TRUE;
          goto out;
@@ -525,7 +529,7 @@ static void
 ungrab_stuff (GtkWidget            *widget,
               GtkCellRendererAccel *accel)
 {
-  GtkCellRendererAccelPriv *priv = accel->priv;
+  GtkCellRendererAccelPrivate *priv = accel->priv;
 
   gtk_device_grab_remove (priv->grab_widget, priv->grab_pointer);
   gdk_device_ungrab (priv->grab_keyboard, GDK_CURRENT_TIME);
@@ -575,16 +579,19 @@ gtk_cell_renderer_accel_start_editing (GtkCellRenderer      *cell,
                                        GdkEvent             *event,
                                        GtkWidget            *widget,
                                        const gchar          *path,
-                                       GdkRectangle         *background_area,
-                                       GdkRectangle         *cell_area,
+                                       const GdkRectangle   *background_area,
+                                       const GdkRectangle   *cell_area,
                                        GtkCellRendererState  flags)
 {
-  GtkCellRendererAccelPriv *priv;
+  GtkCellRendererAccelPrivate *priv;
   GtkCellRendererText *celltext;
   GtkCellRendererAccel *accel;
+  GtkStyle *style;
   GtkWidget *label;
   GtkWidget *eventbox;
   GdkDevice *device, *keyb, *pointer;
+  GdkWindow *window;
+  gboolean editable;
   guint32 time;
 
   celltext = GTK_CELL_RENDERER_TEXT (cell);
@@ -592,10 +599,14 @@ gtk_cell_renderer_accel_start_editing (GtkCellRenderer      *cell,
   priv = accel->priv;
 
   /* If the cell isn't editable we return NULL. */
-  if (celltext->editable == FALSE)
+  g_object_get (celltext, "editable", &editable, NULL);
+  if (editable == FALSE)
     return NULL;
 
-  g_return_val_if_fail (widget->window != NULL, NULL);
+  window = gtk_widget_get_window (widget);
+  style = gtk_widget_get_style (widget);
+
+  g_return_val_if_fail (window != NULL, NULL);
 
   if (event)
     device = gdk_event_get_device (event);
@@ -618,13 +629,13 @@ gtk_cell_renderer_accel_start_editing (GtkCellRenderer      *cell,
 
   time = gdk_event_get_time (event);
 
-  if (gdk_device_grab (keyb, widget->window,
+  if (gdk_device_grab (keyb, window,
                        GDK_OWNERSHIP_WINDOW, FALSE,
                        GDK_KEY_PRESS_MASK | GDK_KEY_RELEASE_MASK,
                        NULL, time) != GDK_GRAB_SUCCESS)
     return NULL;
 
-  if (gdk_device_grab (pointer, widget->window,
+  if (gdk_device_grab (pointer, window,
                        GDK_OWNERSHIP_WINDOW, FALSE,
                        GDK_BUTTON_PRESS_MASK,
                        NULL, time) != GDK_GRAB_SUCCESS)
@@ -648,13 +659,15 @@ gtk_cell_renderer_accel_start_editing (GtkCellRenderer      *cell,
   
   label = gtk_label_new (NULL);
   gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.5);
+
   
+
   gtk_widget_modify_bg (eventbox, GTK_STATE_NORMAL,
-                        &widget->style->bg[GTK_STATE_SELECTED]);
+                        &style->bg[GTK_STATE_SELECTED]);
 
   gtk_widget_modify_fg (label, GTK_STATE_NORMAL,
-                        &widget->style->fg[GTK_STATE_SELECTED]);
-  
+                        &style->fg[GTK_STATE_SELECTED]);
+
   /* This label is displayed in a treeview cell displaying
    * an accelerator when the cell is clicked to change the 
    * acelerator.