~ubuntu-branches/ubuntu/saucy/sflphone/saucy

« back to all changes in this revision

Viewing changes to sflphone-client-gnome/src/config/shortcuts-config.c

  • Committer: Bazaar Package Importer
  • Author(s): Francois Marier
  • Date: 2010-12-24 16:33:55 UTC
  • mfrom: (1.1.2 upstream)
  • Revision ID: james.westby@ubuntu.com-20101224163355-tkvvikqxbrbav6up
Tags: 0.9.11-1
* New upstream release
* Add new build dependencies on libwebkit-dev and libyaml-dev

* Bump Standards-Version up to 3.9.1
* Bump debhelper compatibility to 8
* Patch another typo in the upstream code (lintian notice)

Show diffs side-by-side

added added

removed removed

Lines of Context:
33
33
 
34
34
#include <gdk/gdkx.h>
35
35
 
36
 
GtkWidget*
37
 
create_shortcuts_settings()
38
 
{
39
 
  GtkWidget *vbox, *result_frame, *window, *treeview, *scrolled_window, *label;
40
 
 
41
 
  GtkTreeIter iter;
42
 
  guint i = 0;
43
 
 
44
 
  vbox = gtk_vbox_new(FALSE, 10);
45
 
  gtk_container_set_border_width(GTK_CONTAINER(vbox), 10);
46
 
 
47
 
  gnome_main_section_new(_("General"), &result_frame);
48
 
 
49
 
  label = gtk_label_new(_("Be careful: these shortcuts might override system-wide shortcuts."));
50
 
 
51
 
  treeview = gtk_tree_view_new();
52
 
  setup_tree_view(treeview);
53
 
 
54
 
  GtkListStore *store = gtk_list_store_new(COLUMNS, G_TYPE_STRING, G_TYPE_INT, G_TYPE_UINT);
55
 
 
56
 
  Accelerator* list = shortcuts_get_list();
57
 
 
58
 
  while (list[i].action != NULL)
59
 
    {
60
 
      gtk_list_store_append(store, &iter);
61
 
      gtk_list_store_set(store, &iter, ACTION, _(list[i].action), MASK,
62
 
          (gint) list[i].mask, VALUE, XKeycodeToKeysym(GDK_DISPLAY(),
63
 
              list[i].value, 0), -1);
64
 
      i++;
 
36
static void
 
37
accel_cleared (GtkCellRendererAccel *renderer UNUSED, gchar *path,
 
38
               GtkTreeView *treeview)
 
39
{
 
40
    DEBUG ("Accel cleared");
 
41
 
 
42
    GtkTreeModel *model;
 
43
    GtkTreeIter iter;
 
44
 
 
45
    // Update treeview
 
46
    model = gtk_tree_view_get_model (treeview);
 
47
 
 
48
    if (gtk_tree_model_get_iter_from_string (model, &iter, path))
 
49
        gtk_list_store_set (GTK_LIST_STORE (model), &iter, MASK, 0, VALUE, 0, -1);
 
50
 
 
51
    // Update GDK bindings
 
52
    shortcuts_update_bindings (atoi (path), 0, 0);
 
53
}
 
54
 
 
55
static void
 
56
accel_edited (GtkCellRendererAccel *renderer UNUSED, gchar *path, guint accel_key,
 
57
              GdkModifierType mask, guint hardware_keycode UNUSED, GtkTreeView *treeview)
 
58
{
 
59
    DEBUG ("Accel edited");
 
60
 
 
61
    GtkTreeModel *model;
 
62
    GtkTreeIter iter;
 
63
 
 
64
    Accelerator* list = shortcuts_get_list ();
 
65
    model = gtk_tree_view_get_model (treeview);
 
66
    guint code = XKeysymToKeycode (GDK_DISPLAY(), accel_key);
 
67
 
 
68
    // Disable existing binding if key already used
 
69
    int i = 0;
 
70
    gtk_tree_model_get_iter_first (model, &iter);
 
71
 
 
72
    while (list[i].action != NULL) {
 
73
        if (list[i].key == code && list[i].mask == mask) {
 
74
            gtk_list_store_set (GTK_LIST_STORE (model), &iter, MASK, 0, VALUE, 0,
 
75
                                -1);
 
76
            WARN ("This key was already affected");
 
77
        }
 
78
 
 
79
        gtk_tree_model_iter_next (model, &iter);
 
80
        i++;
65
81
    }
66
82
 
67
 
  gtk_tree_view_set_model(GTK_TREE_VIEW (treeview), GTK_TREE_MODEL (store));
68
 
  g_object_unref(store);
69
 
 
70
 
  gtk_container_add(GTK_CONTAINER (result_frame), treeview);
71
 
  gtk_box_pack_start(GTK_BOX(vbox), label, FALSE, FALSE, 0);
72
 
  gtk_box_pack_start(GTK_BOX(vbox), result_frame, FALSE, FALSE, 0);
73
 
 
74
 
  gtk_widget_show_all(vbox);
75
 
 
76
 
  return vbox;
 
83
    // Update treeview
 
84
    if (gtk_tree_model_get_iter_from_string (model, &iter, path))
 
85
        gtk_list_store_set (GTK_LIST_STORE (model), &iter, MASK, (gint) mask,
 
86
                            VALUE, accel_key, -1);
 
87
 
 
88
    // Update GDK bindings
 
89
    shortcuts_update_bindings (atoi (path), code, mask);
77
90
}
78
91
 
79
92
/*
81
94
 * second is a keyboard accelerator.
82
95
 */
83
96
static void
84
 
setup_tree_view(GtkWidget *treeview)
85
 
{
86
 
  GtkCellRenderer *renderer;
87
 
  GtkTreeViewColumn *column;
88
 
 
89
 
  renderer = gtk_cell_renderer_text_new();
90
 
  column = gtk_tree_view_column_new_with_attributes("Action", renderer, "text",
91
 
      ACTION, NULL);
92
 
  gtk_tree_view_append_column(GTK_TREE_VIEW (treeview), column);
93
 
 
94
 
  renderer = gtk_cell_renderer_accel_new();
95
 
  g_object_set(renderer, "accel-mode", GTK_CELL_RENDERER_ACCEL_MODE_GTK,
96
 
      "editable", TRUE, NULL);
97
 
  column = gtk_tree_view_column_new_with_attributes("Shortcut", renderer,
98
 
      "accel-mods", MASK, "accel-key", VALUE, NULL);
99
 
 
100
 
  gtk_tree_view_append_column(GTK_TREE_VIEW (treeview), column);
101
 
  g_signal_connect (G_OBJECT (renderer), "accel_edited", G_CALLBACK (accel_edited), (gpointer) treeview);
102
 
  g_signal_connect (G_OBJECT (renderer), "accel_cleared", G_CALLBACK (accel_cleared), (gpointer) treeview);
103
 
}
104
 
 
105
 
static void
106
 
accel_edited(GtkCellRendererAccel *renderer, gchar *path, guint accel_key,
107
 
    GdkModifierType mask, guint hardware_keycode, GtkTreeView *treeview)
108
 
{
109
 
  DEBUG("Accel edited");
110
 
 
111
 
  GtkTreeModel *model;
112
 
  GtkTreeIter iter;
113
 
 
114
 
  Accelerator* list = shortcuts_get_list();
115
 
  model = gtk_tree_view_get_model(treeview);
116
 
  gint code = XKeysymToKeycode(GDK_DISPLAY(), accel_key);
117
 
 
118
 
  // Disable existing binding if key already used
119
 
  int i = 0;
120
 
  gtk_tree_model_get_iter_first(model, &iter);
121
 
  while (list[i].action != NULL)
122
 
      {
123
 
          if(list[i].value == code)
124
 
            {
125
 
              gtk_list_store_set(GTK_LIST_STORE (model), &iter, MASK, 0, VALUE, 0, -1);
126
 
              WARN("This key was already affected");
127
 
            }
128
 
          gtk_tree_model_iter_next(model, &iter);
129
 
          i++;
130
 
      }
131
 
 
132
 
  // Update treeview
133
 
  if (gtk_tree_model_get_iter_from_string(model, &iter, path))
134
 
    gtk_list_store_set(GTK_LIST_STORE (model), &iter, MASK, (gint) mask, VALUE,
135
 
        accel_key, -1);
136
 
 
137
 
  // Update GDK bindings
138
 
  shortcuts_update_bindings(atoi(path), code);
139
 
}
140
 
 
141
 
static void
142
 
accel_cleared(GtkCellRendererAccel *renderer, gchar *path, GtkTreeView *treeview)
143
 
{
144
 
  DEBUG("Accel cleared");
145
 
 
146
 
  GtkTreeModel *model;
147
 
  GtkTreeIter iter;
148
 
 
149
 
  // Update treeview
150
 
  model = gtk_tree_view_get_model(treeview);
151
 
  if (gtk_tree_model_get_iter_from_string(model, &iter, path))
152
 
    gtk_list_store_set(GTK_LIST_STORE (model), &iter, MASK, 0, VALUE, 0, -1);
153
 
 
154
 
  // Update GDK bindings
155
 
  shortcuts_update_bindings(atoi(path), 0);
156
 
}
 
97
setup_tree_view (GtkWidget *treeview)
 
98
{
 
99
    GtkCellRenderer *renderer;
 
100
    GtkTreeViewColumn *column;
 
101
 
 
102
    renderer = gtk_cell_renderer_text_new ();
 
103
    column = gtk_tree_view_column_new_with_attributes ("Action", renderer,
 
104
             "text", ACTION, NULL);
 
105
    gtk_tree_view_append_column (GTK_TREE_VIEW (treeview), column);
 
106
 
 
107
    renderer = gtk_cell_renderer_accel_new ();
 
108
    g_object_set (renderer, "accel-mode", GTK_CELL_RENDERER_ACCEL_MODE_GTK,
 
109
                  "editable", TRUE, NULL);
 
110
    column = gtk_tree_view_column_new_with_attributes ("Shortcut", renderer,
 
111
             "accel-mods", MASK, "accel-key", VALUE, NULL);
 
112
 
 
113
    gtk_tree_view_append_column (GTK_TREE_VIEW (treeview), column);
 
114
    g_signal_connect (G_OBJECT (renderer), "accel_edited", G_CALLBACK (accel_edited), (gpointer) treeview);
 
115
    g_signal_connect (G_OBJECT (renderer), "accel_cleared", G_CALLBACK (accel_cleared), (gpointer) treeview);
 
116
}
 
117
 
 
118
GtkWidget*
 
119
create_shortcuts_settings ()
 
120
{
 
121
    GtkWidget *vbox, *result_frame, *treeview, *label;
 
122
 
 
123
    GtkTreeIter iter;
 
124
    guint i = 0;
 
125
 
 
126
    vbox = gtk_vbox_new (FALSE, 10);
 
127
    gtk_container_set_border_width (GTK_CONTAINER (vbox), 10);
 
128
 
 
129
    gnome_main_section_new (_ ("General"), &result_frame);
 
130
 
 
131
    label = gtk_label_new (
 
132
                _ ("Be careful: these shortcuts might override system-wide shortcuts."));
 
133
    treeview = gtk_tree_view_new ();
 
134
    setup_tree_view (treeview);
 
135
 
 
136
    GtkListStore *store = gtk_list_store_new (COLUMNS, G_TYPE_STRING, G_TYPE_INT,
 
137
                          G_TYPE_UINT);
 
138
 
 
139
    Accelerator* list = shortcuts_get_list ();
 
140
 
 
141
    while (list[i].action != NULL) {
 
142
        gtk_list_store_append (store, &iter);
 
143
        gtk_list_store_set (store, &iter, ACTION, _ (list[i].action), MASK,
 
144
                            (gint) list[i].mask, VALUE, XKeycodeToKeysym (GDK_DISPLAY(),
 
145
                                    list[i].key, 0), -1);
 
146
        i++;
 
147
    }
 
148
 
 
149
    gtk_tree_view_set_model (GTK_TREE_VIEW (treeview), GTK_TREE_MODEL (store));
 
150
    g_object_unref (store);
 
151
 
 
152
    gtk_container_add (GTK_CONTAINER (result_frame), treeview);
 
153
    gtk_box_pack_start (GTK_BOX (vbox), label, FALSE, FALSE, 0);
 
154
    gtk_box_pack_start (GTK_BOX (vbox), result_frame, FALSE, FALSE, 0);
 
155
 
 
156
    gtk_widget_show_all (vbox);
 
157
 
 
158
    return vbox;
 
159
}
 
160