Project

General

Profile

change_shortcuts_v4.patch

anonymous password, March 02, 2012 05:40

View differences:

menus.c 2012-03-01 22:06:58.822666947 -0600
46 46
    const gchar * icon;
47 47
    guint key;
48 48
    GdkModifierType mod;
49
    const gchar * identifier;
49 50

  
50 51
    /* for normal items */
51 52
    void (* func) (void);
......
128 129
static void autoscroll_set (gboolean on) {aud_set_bool ("gtkui", "autoscroll", on); }
129 130

  
130 131
static const struct MenuItem file_items[] = {
131
 {N_("_Open Files ..."), GTK_STOCK_OPEN, 'o', CTRL, .func = open_files},
132
 {N_("Open _URL ..."), GTK_STOCK_NETWORK, 'l', CTRL, .func = open_url},
133
 {N_("_Add Files ..."), GTK_STOCK_ADD, 'o', SHIFT | CTRL, .func = add_files},
134
 {N_("Add U_RL ..."), GTK_STOCK_NETWORK, 'l', SHIFT | CTRL, .func = add_url},
135
 {.sep = TRUE},
136
 {N_("A_bout ..."), GTK_STOCK_ABOUT, .func = audgui_show_about_window},
137
 {N_("_Preferences ..."), GTK_STOCK_PREFERENCES, .func = aud_show_prefs_window},
138
 {N_("_Quit"), GTK_STOCK_QUIT, 'q', CTRL, .func = aud_drct_quit}};
132
 {N_("_Open Files ..."), GTK_STOCK_OPEN, 'o', CTRL, "open_files", .func = open_files},
133
 {N_("Open _URL ..."), GTK_STOCK_NETWORK, 'l', CTRL, "open_url", .func = open_url},
134
 {N_("_Add Files ..."), GTK_STOCK_ADD, 'o', SHIFT | CTRL, "add_files", .func = add_files},
135
 {N_("Add U_RL ..."), GTK_STOCK_NETWORK, 'l', SHIFT | CTRL, "add_url", .func = add_url},
136
 {.sep = TRUE},
137
 {N_("A_bout ..."), GTK_STOCK_ABOUT, .identifier = "about", .func = audgui_show_about_window},
138
 {N_("_Preferences ..."), GTK_STOCK_PREFERENCES, .identifier = "preferences", .func = aud_show_prefs_window},
139
 {N_("_Quit"), GTK_STOCK_QUIT, 'q', CTRL, "quit", .func = aud_drct_quit}};
139 140

  
140 141
static const struct MenuItem playback_items[] = {
141
 {N_("_Play"), GTK_STOCK_MEDIA_PLAY, GDK_Return, CTRL, .func = aud_drct_play},
142
 {N_("Paus_e"), GTK_STOCK_MEDIA_PAUSE, ',', CTRL, .func = aud_drct_pause},
143
 {N_("_Stop"), GTK_STOCK_MEDIA_STOP, '.', CTRL, .func = aud_drct_stop},
144
 {N_("Pre_vious"), GTK_STOCK_MEDIA_PREVIOUS, GDK_Up, ALT, .func = aud_drct_pl_prev},
145
 {N_("_Next"), GTK_STOCK_MEDIA_NEXT, GDK_Down, ALT, .func = aud_drct_pl_next},
146
 {.sep = TRUE},
147
 {N_("_Repeat"), NULL, 'r', CTRL, .get = repeat_get, repeat_set, "set repeat"},
148
 {N_("S_huffle"), NULL, 's', CTRL, .get = shuffle_get, shuffle_set, "set shuffle"},
149
 {N_("N_o Playlist Advance"), NULL, 'n', CTRL, .get = no_advance_get, no_advance_set, "set no_playlist_advance"},
150
 {N_("Stop _After This Song"), NULL, 'm', CTRL, .get = stop_after_get, stop_after_set, "set stop_after_current_song"},
151
 {.sep = TRUE},
152
 {N_("Song _Info ..."), GTK_STOCK_INFO, 'i', CTRL, .func = audgui_infowin_show_current},
153
 {N_("Jump to _Time ..."), GTK_STOCK_JUMP_TO, .func = audgui_jump_to_time},
154
 {N_("_Jump to Song ..."), GTK_STOCK_JUMP_TO, 'j', CTRL, .func = audgui_jump_to_track}};
142
 {N_("_Play"), GTK_STOCK_MEDIA_PLAY, GDK_Return, CTRL, "play", .func = aud_drct_play},
143
 {N_("Paus_e"), GTK_STOCK_MEDIA_PAUSE, ',', CTRL, "pause", .func = aud_drct_pause},
144
 {N_("_Stop"), GTK_STOCK_MEDIA_STOP, '.', CTRL, "stop", .func = aud_drct_stop},
145
 {N_("Pre_vious"), GTK_STOCK_MEDIA_PREVIOUS, GDK_Up, ALT, "previous", .func = aud_drct_pl_prev},
146
 {N_("_Next"), GTK_STOCK_MEDIA_NEXT, GDK_Down, ALT, "next", .func = aud_drct_pl_next},
147
 {.sep = TRUE},
148
 {N_("_Repeat"), NULL, 'r', CTRL, "repeat", .get = repeat_get, repeat_set, "set repeat"},
149
 {N_("S_huffle"), NULL, 's', CTRL, "shuffle", .get = shuffle_get, shuffle_set, "set shuffle"},
150
 {N_("N_o Playlist Advance"), NULL, 'n', CTRL, "no_playlist_advance", .get = no_advance_get, no_advance_set, "set no_playlist_advance"},
151
 {N_("Stop _After This Song"), NULL, 'm', CTRL, "stop_after_this_song", .get = stop_after_get, stop_after_set, "set stop_after_current_song"},
152
 {.sep = TRUE},
153
 {N_("Song _Info ..."), GTK_STOCK_INFO, 'i', CTRL, "song_info", .func = audgui_infowin_show_current},
154
 {N_("Jump to _Time ..."), GTK_STOCK_JUMP_TO, .identifier = "jump_to_time", .func = audgui_jump_to_time},
155
 {N_("_Jump to Song ..."), GTK_STOCK_JUMP_TO, 'j', CTRL, "jump_to_song", .func = audgui_jump_to_track}};
155 156

  
156 157
static const struct MenuItem sort_items[] = {
157 158
 {N_("By Track _Number"), .func = pl_sort_track},
......
166 167
 {N_("_Random Order"), .func = pl_random}};
167 168

  
168 169
static const struct MenuItem playlist_items[] = {
169
 {N_("_Refresh"), GTK_STOCK_REFRESH, GDK_F5, .func = pl_refresh},
170
 {N_("Remove _Unavailable Files"), GTK_STOCK_REMOVE, .func = pl_remove_failed},
170
 {N_("_Refresh"), GTK_STOCK_REFRESH, GDK_F5, .identifier = "playlist_refresh", .func = pl_refresh},
171
 {N_("Remove _Unavailable Files"), GTK_STOCK_REMOVE, .identifier = "playlist_remove", .func = pl_remove_failed},
171 172
 {.sep = TRUE},
172 173
 {N_("_Sort"), GTK_STOCK_SORT_ASCENDING, .items = sort_items, G_N_ELEMENTS (sort_items)},
173 174
 {.sep = TRUE},
174
 {N_("_New"), GTK_STOCK_NEW, 't', CTRL, .func = pl_new},
175
 {N_("_Close"), GTK_STOCK_CLOSE, 'w', CTRL, .func = pl_close},
175
 {N_("_New"), GTK_STOCK_NEW, 't', CTRL, "playlist_new", .func = pl_new},
176
 {N_("_Close"), GTK_STOCK_CLOSE, 'w', CTRL, "playlist_close", .func = pl_close},
176 177
 {.sep = TRUE},
177
 {N_("_Import ..."), GTK_STOCK_OPEN, .func = audgui_import_playlist},
178
 {N_("_Export ..."), GTK_STOCK_SAVE, .func = audgui_export_playlist},
178
 {N_("_Import ..."), GTK_STOCK_OPEN, .identifier = "playlist_import", .func = audgui_import_playlist},
179
 {N_("_Export ..."), GTK_STOCK_SAVE, .identifier = "playlist_export", .func = audgui_export_playlist},
179 180
 {.sep = TRUE},
180
 {N_("_Playlist Manager ..."), AUD_STOCK_PLAYLIST, 'p', CTRL, .func = audgui_playlist_manager},
181
 {N_("_Queue Manager ..."), AUD_STOCK_QUEUETOGGLE, 'u', CTRL, .func = audgui_queue_manager_show}};
181
 {N_("_Playlist Manager ..."), AUD_STOCK_PLAYLIST, 'p', CTRL, "playlist_manager", .func = audgui_playlist_manager},
182
 {N_("_Queue Manager ..."), AUD_STOCK_QUEUETOGGLE, 'u', CTRL, "queue_manager", .func = audgui_queue_manager_show}};
182 183

  
183 184
static const struct MenuItem output_items[] = {
184
 {N_("Volume _Up"), GTK_STOCK_GO_UP, '+', CTRL, .func = volume_up},
185
 {N_("Volume _Down"), GTK_STOCK_GO_DOWN, '-', CTRL, .func = volume_down},
185
 {N_("Volume _Up"), GTK_STOCK_GO_UP, '+', CTRL, "volume_up", .func = volume_up},
186
 {N_("Volume _Down"), GTK_STOCK_GO_DOWN, '-', CTRL, "volume_down", .func = volume_down},
186 187
 {.sep = TRUE},
187
 {N_("_Equalizer"), GTK_STOCK_PREFERENCES, 'e', CTRL, .func = audgui_show_equalizer_window},
188
 {N_("_Equalizer"), GTK_STOCK_PREFERENCES, 'e', CTRL, "equalizer", .func = audgui_show_equalizer_window},
188 189
 {.sep = TRUE},
189 190
 {N_("E_ffects"), .get_sub = audgui_create_effects_menu}};
190 191

  
......
192 193
 {N_("_Interface"), .get_sub = audgui_create_iface_menu},
193 194
 {N_("_Visualizations"), .get_sub = audgui_create_vis_menu},
194 195
 {.sep = TRUE},
195
 {N_("Show _Menu Bar"), NULL, 'm', SHIFT | CTRL, .get = menu_bar_get, show_menu},
196
 {N_("Show I_nfo Bar"), NULL, 'i', SHIFT | CTRL, .get = info_bar_get, show_infoarea},
197
 {N_("Show _Status Bar"), NULL, 's', SHIFT | CTRL, .get = status_bar_get, show_statusbar},
198
 {.sep = TRUE},
199
 {N_("Show Column _Headers"), .get = column_headers_get, playlist_show_headers},
200
 {N_("Choose _Columns ..."), .func = pw_col_choose},
201
 {N_("Scrol_l on Song Change"), .get = autoscroll_get, autoscroll_set}};
196
 {N_("Show _Menu Bar"), NULL, 'm', SHIFT | CTRL, "show_menu_bar", .get = menu_bar_get, show_menu},
197
 {N_("Show I_nfo Bar"), NULL, 'i', SHIFT | CTRL, "show_info_bar", .get = info_bar_get, show_infoarea},
198
 {N_("Show _Status Bar"), NULL, 's', SHIFT | CTRL, "show_status_bar", .get = status_bar_get, show_statusbar},
199
 {.sep = TRUE},
200
 {N_("Show Column _Headers"), .identifier = "show_column_headers", .get = column_headers_get, playlist_show_headers},
201
 {N_("Choose _Columns ..."), .identifier = "choose_columns", .func = pw_col_choose},
202
 {N_("Scrol_l on Song Change"),  .identifier = "scroll_on_song_change", .get = autoscroll_get, autoscroll_set}};
202 203

  
203 204
static const struct MenuItem main_items[] = {
204 205
 {N_("_File"), .items = file_items, G_N_ELEMENTS (file_items)},
......
209 210
 {N_("_View"), .items = view_items, G_N_ELEMENTS (view_items)}};
210 211

  
211 212
static const struct MenuItem rclick_items[] = {
212
 {N_("Song _Info ..."), GTK_STOCK_INFO, 'i', ALT, .func = playlist_song_info},
213
 {N_("_Queue/Unqueue"), AUD_STOCK_QUEUETOGGLE, 'q', ALT, .func = playlist_queue_toggle},
214
 {N_("_Refresh"), GTK_STOCK_REFRESH, GDK_F6, .func = pl_refresh_sel},
215
 {.sep = TRUE},
216
 {N_("Cu_t"), GTK_STOCK_CUT, .func = playlist_cut},
217
 {N_("_Copy"), GTK_STOCK_COPY, .func = playlist_copy},
218
 {N_("_Paste"), GTK_STOCK_PASTE, .func = playlist_paste},
219
 {N_("Select _All"), GTK_STOCK_SELECT_ALL, .func = pl_select_all},
213
 {N_("Song _Info ..."), GTK_STOCK_INFO, 'i', ALT, "list_song_info", .func = playlist_song_info},
214
 {N_("_Queue/Unqueue"), AUD_STOCK_QUEUETOGGLE, 'q', ALT, "list_queue", .func = playlist_queue_toggle},
215
 {N_("_Refresh"), GTK_STOCK_REFRESH, GDK_F6, .identifier = "list_refresh", .func = pl_refresh_sel},
216
 {.sep = TRUE},
217
 {N_("Cu_t"), GTK_STOCK_CUT, .identifier = "list_cut", .func = playlist_cut},
218
 {N_("_Copy"), GTK_STOCK_COPY, .identifier = "list_copy", .func = playlist_copy},
219
 {N_("_Paste"), GTK_STOCK_PASTE, .identifier = "list_paste", .func = playlist_paste},
220
 {N_("Select _All"), GTK_STOCK_SELECT_ALL, .identifier = "list_select_all", .func = pl_select_all},
220 221
 {.sep = TRUE},
221 222
 {N_("_Services"), .get_sub = get_services_pl}};
222 223

  
223 224
static const struct MenuItem tab_items[] = {
224
 {N_("_Rename"), GTK_STOCK_EDIT, GDK_F2, .func = pl_rename},
225
 {N_("_Close"), GTK_STOCK_CLOSE, .func = pl_close}};
225
 {N_("_Rename"), GTK_STOCK_EDIT, GDK_F2, .identifier = "tab_rename", .func = pl_rename},
226
 {N_("_Close"), GTK_STOCK_CLOSE, .identifier = "tab_close", .func = pl_close}};
226 227

  
227 228
static void toggled_cb (GtkCheckMenuItem * check, const struct MenuItem * item)
228 229
{
......
243 244
    hook_dissociate_full (item->hook, (HookFunction) hook_cb, check);
244 245
}
245 246

  
247
static void hotkey_changed (GtkAccelMap *object, gchar *accel_path, guint accel_key,
248
 GdkModifierType accel_mods, gpointer user_data)
249
{
250
    if (g_str_has_prefix (accel_path, "<audacious>/"))
251
    {
252
        gchar *entry = g_strconcat ("key_", accel_path+strlen("<audacious>/"), NULL);
253
        gchar *name=gtk_accelerator_name (accel_key, accel_mods);
254
        aud_set_string ("gtkui", entry, name);
255
        g_free (name);
256
        g_free (entry);
257
    }
258
}
259

  
246 260
static void populate_menu (GtkWidget * shell, const struct MenuItem * items,
247 261
 gint n_items, GtkAccelGroup * accel)
248 262
{
......
291 305
            else
292 306
            {
293 307
                sub = gtk_menu_new ();
308
                gtk_menu_set_accel_group (GTK_MENU (sub), accel);
294 309
                populate_menu (sub, item->items, item->n_items, accel);
295 310
            }
296 311

  
......
302 317
        if (! widget)
303 318
            continue;
304 319

  
305
        if (item->key)
306
            gtk_widget_add_accelerator (widget, "activate", accel, item->key,
307
             item->mod, GTK_ACCEL_VISIBLE);
320
        guint fkey = 0;
321
        GdkModifierType fmod = 0;
322
        if (item->identifier)
323
        {
324
            gchar *temp = g_strconcat ("key_", item->identifier, NULL);
325
            gchar *nkey = aud_get_string ("gtkui", temp);
326
            gtk_accelerator_parse (nkey, &fkey, &fmod);
327
            g_free (nkey);
328
            g_free (temp);
329
        }
330

  
331
        if(!fkey)
332
        {
333
            fkey = item->key;
334
            fmod = item->mod;
335
        }
336

  
337
        if (fkey)
338
        {
339
            if (item->identifier)
340
            {
341
                gchar *accel_path=g_strconcat ("<audacious>/", item->identifier, NULL);
342
                gtk_menu_item_set_accel_path (GTK_MENU_ITEM (widget), accel_path);
343
                gtk_accel_map_add_entry (accel_path, fkey, fmod);
344
                g_free (accel_path);
345
            }
346
            else
347
                gtk_widget_add_accelerator (widget, "activate", accel, fkey,
348
                 fmod, GTK_ACCEL_VISIBLE);
349
        }
308 350

  
309 351
        gtk_widget_show (widget);
310 352
        gtk_menu_shell_append ((GtkMenuShell *) shell, widget);
......
315 357
{
316 358
    GtkWidget * bar = gtk_menu_bar_new ();
317 359
    populate_menu (bar, main_items, G_N_ELEMENTS (main_items), accel);
360
    g_signal_connect (gtk_accel_map_get (), "changed", G_CALLBACK (hotkey_changed), NULL);
318 361
    return bar;
319 362
}
320 363

  
321 364
GtkWidget * make_menu_main (GtkAccelGroup * accel)
322 365
{
323 366
    GtkWidget * shell = gtk_menu_new ();
367
    gtk_menu_set_accel_group (GTK_MENU (shell), accel);
324 368
    populate_menu (shell, main_items, G_N_ELEMENTS (main_items), accel);
325 369
    return shell;
326 370
}
......
328 372
GtkWidget * make_menu_rclick (GtkAccelGroup * accel)
329 373
{
330 374
    GtkWidget * shell = gtk_menu_new ();
375
    gtk_menu_set_accel_group (GTK_MENU (shell), accel);
331 376
    populate_menu (shell, rclick_items, G_N_ELEMENTS (rclick_items), accel);
332 377
    return shell;
333 378
}
......
335 380
GtkWidget * make_menu_tab (GtkAccelGroup * accel)
336 381
{
337 382
    GtkWidget * shell = gtk_menu_new ();
383
    gtk_menu_set_accel_group (GTK_MENU (shell), accel);
338 384
    populate_menu (shell, tab_items, G_N_ELEMENTS (tab_items), accel);
339 385
    return shell;
340 386
}
341
-- a/ui_gtk.c	2012-03-01 22:36:05.418266520 -0600
387
++ b/ui_gtk.c	2012-03-01 22:13:29.522779015 -0600
......
483 483

  
484 484
static gboolean window_keypress_cb (GtkWidget * widget, GdkEventKey * event, void * unused)
485 485
{
486
    /* spacebar is handled specially by treeviews (libaudgui/list.c) so it needs some love here */
487
    if ((event->keyval == ' ' && ! (event->state & GDK_CONTROL_MASK)) && G_OBJECT_TYPE (G_OBJECT (gtk_window_get_focus (GTK_WINDOW (widget)))) == GTK_TYPE_TREE_VIEW)
488
        return FALSE;
489

  
490
    /* prevent hotkeys from interfering with text input */
491
    if (gtk_window_propagate_key_event(GTK_WINDOW (widget), event))
492
        return TRUE;
493

  
486 494
    switch (event->state & (GDK_SHIFT_MASK | GDK_CONTROL_MASK | GDK_MOD1_MASK))
487 495
    {
488 496
      case GDK_CONTROL_MASK: