Re: simple key-binding (up,left,down,right)...



jozix wrote:
Hi, I didn't find any tutorials or refernce manuals to keybindig. I want to ask you for a very simple 
example for binding basic keys like up, down, left, right...

Thank you very much


This sample code creates a "navigate" signal which will be emitted
when left/right/down/up key is pressed with different parameters.
Signal prototype is

void            navigate(GtkXYZ *xyz, int parameter);

where parameter is one of NAVIGATE_(LEFT|RIGHT|UP|DOWN).


typedef struct _GtkUtilsBindingInfo     GtkUtilsBindingInfo;

struct _GtkUtilsBindingInfo {
  guint            keyval;
  GdkModifierType  modifiers;
  gint             signal_parameter;
};


void
gtk_utils_add_similar_bindings(GtkBindingSet *binding_set,
                               const gchar *signal_name,
                               GtkUtilsBindingInfo *bindings,
                               int num_bindings)
{
  int k;

  assert(binding_set);
  assert(signal_name);
  assert(bindings);
  assert(num_bindings > 0);

  for (k = 0; k < num_bindings; k++) {
    gtk_binding_entry_add_signal(binding_set,
                                 bindings[k].keyval, bindings[k].modifiers,
                                 signal_name,
                                 1, G_TYPE_INT, bindings[k].signal_parameter);
  }
}


static void
gtk_xyz_class_init(GtkXYZClass *class)
{
  static GtkUtilsBindingInfo navigation_bindings[] = {
    { GDK_Left,         0,      NAVIGATE_LEFT  },
    { GDK_Right,        0,      NAVIGATE_RIGHT },
    { GDK_Up,           0,      NAVIGATE_UP    },
    { GDK_Down,         0,      NAVIGATE_DOWN  },
  };

  GtkBindingSet *binding_set;

  binding_set = gtk_binding_set_by_class(class);
  gtk_utils_add_similar_bindings(binding_set, "navigate", navigation_bindings,
                                 (sizeof(navigation_bindings)
                                  / sizeof(GtkUtilsBindingInfo)));
}


Paul



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]