diff --git a/src/dialogs/settings/accelerator.c b/src/dialogs/settings/accelerator.c index 3b8c019..789fe6c 100644 --- a/src/dialogs/settings/accelerator.c +++ b/src/dialogs/settings/accelerator.c @@ -104,10 +104,27 @@ COLUMNS ///< @brief Number of view columns. }; + static void realize(GtkWidget G_GNUC_UNUSED(*widget), GtkTreeView *view) + { + gtk_tree_view_columns_autosize(view); + } + static void V3270AcceleratorSettings_init(V3270AcceleratorSettings *widget) { - // Create Accelerator list + // Create description list GtkCellRenderer * text_renderer = gtk_cell_renderer_text_new(); + + /* + g_object_set( + text_renderer, + "alignment", PANGO_ALIGN_LEFT, + "wrap-width", 100, + "wrap-mode", PANGO_WRAP_WORD_CHAR, + NULL + ); + */ + + // Create accelerator render GtkCellRenderer * accel_renderer[] = { gtk_cell_renderer_accel_new(), gtk_cell_renderer_accel_new() }; g_object_set( @@ -130,19 +147,40 @@ gtk_tree_sortable_set_sort_column_id(GTK_TREE_SORTABLE(widget->store),1,GTK_TREE_SORTABLE_DEFAULT_SORT_COLUMN_ID); GtkWidget * view = gtk_tree_view_new_with_model(GTK_TREE_MODEL(widget->store)); + g_signal_connect(G_OBJECT(widget),"realize",G_CALLBACK(realize),view); + + /* + g_object_set( + view, + "horizontal-separator", 50, + "vertical-separator", 50, + NULL + ); + */ gtk_widget_set_tooltip_markup(view,_("Keyboard accelerators")); + gtk_tree_view_set_fixed_height_mode(GTK_TREE_VIEW(view),FALSE); + + // Description column + GtkTreeViewColumn * column = + gtk_tree_view_column_new_with_attributes( + _("Action"), + text_renderer, + "text", + DESCRIPTION, + NULL + ); - gtk_tree_view_insert_column_with_attributes( + gtk_tree_view_column_set_resizable(column, TRUE); + gtk_tree_view_column_set_min_width(column, 500); + + gtk_tree_view_insert_column( GTK_TREE_VIEW(view), - -1, - _("Action"), - text_renderer, - "text", - DESCRIPTION, - NULL + column, + -1 ); + // Accelerator columns gtk_tree_view_insert_column_with_attributes( GTK_TREE_VIEW(view), -1, @@ -169,13 +207,15 @@ gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(box),GTK_POLICY_AUTOMATIC,GTK_POLICY_AUTOMATIC); gtk_container_add(GTK_CONTAINER(box),view); + /* gtk_widget_set_vexpand(view,TRUE); gtk_widget_set_hexpand(view,TRUE); + */ gtk_widget_set_vexpand(box,TRUE); gtk_widget_set_hexpand(box,TRUE); - gtk_grid_attach(GTK_GRID(widget),box,0,0,4,4); + gtk_grid_attach(GTK_GRID(widget),box,0,0,10,10); } } @@ -435,7 +475,7 @@ void load(GtkWidget *widget, GtkWidget *terminal) } -static gboolean add_accel(GtkTreeModel *model, GtkTreePath *path, GtkTreeIter *iter, GSList **accelerators) +static gboolean add_accel(GtkTreeModel *model, GtkTreePath G_GNUC_UNUSED(*path), GtkTreeIter *iter, GSList **accelerators) { static const gint columns[] = { MAIN_MASK, MAIN_VALUE, ALTERNATIVE_MASK, ALTERNATIVE_VALUE }; size_t ix; @@ -451,9 +491,6 @@ static gboolean add_accel(GtkTreeModel *model, GtkTreePath *path, GtkTreeIter *i for(ix = 0; ix < 2; ix++) { - guint key; - GdkModifierType mask; - memset(&value,0,sizeof(value)); gtk_tree_model_get_value(model, iter, columns[(ix * 2)], &value); keymap[ix].mods = (GdkModifierType) g_value_get_int(&value); diff --git a/src/include/internals.h b/src/include/internals.h index 8aae92b..39deb61 100644 --- a/src/include/internals.h +++ b/src/include/internals.h @@ -379,7 +379,8 @@ G_GNUC_INTERNAL void v3270_draw_element(cairo_t *cr, unsigned char chr, unsigned G_GNUC_INTERNAL void v3270_update_toggle(GtkWidget *widget, LIB3270_TOGGLE_ID id, unsigned char value, const char *name); // Accelerators - G_GNUC_INTERNAL void v3270_init_accelerators(v3270 *widget); + G_GNUC_INTERNAL void v3270_accelerator_map_sort(v3270 *widget); + G_GNUC_INTERNAL void v3270_init_accelerators(v3270 *widget); G_END_DECLS diff --git a/src/include/v3270/actions.h b/src/include/v3270/actions.h index 0be25dd..2fc6210 100644 --- a/src/include/v3270/actions.h +++ b/src/include/v3270/actions.h @@ -79,7 +79,7 @@ // // Keyboard accelerators // - LIB3270_EXPORT void v3270_backtab(GtkWidget *widget); + LIB3270_EXPORT void v3270_backtab(GtkWidget *widget); /// @brief Reset accelerator map to defaults. LIB3270_EXPORT void v3270_accelerator_map_reset(GtkWidget *widget); @@ -98,6 +98,8 @@ /// @return A newly-allocated string representing the accelerator. LIB3270_EXPORT gchar * v3270_accelerator_get_label(const V3270Accelerator * accel); + LIB3270_EXPORT V3270Accelerator * v3270_accelerator_copy(const V3270Accelerator *accel); + G_END_DECLS #endif // V3270_ACTIONS_H_INCLUDED diff --git a/src/terminal/keyboard/accelerator.c b/src/terminal/keyboard/accelerator.c index 0cb4de7..9ee37fb 100644 --- a/src/terminal/keyboard/accelerator.c +++ b/src/terminal/keyboard/accelerator.c @@ -158,6 +158,7 @@ break; case V3270_ACCELERATOR_TYPE_INTERNAL: + if( ((V3270_ACTION *) accel->arg)->summary ) return gettext(((V3270_ACTION *) accel->arg)->summary); @@ -177,8 +178,10 @@ break; case V3270_ACCELERATOR_TYPE_PFKEY: + if( ((V3270PFKeyAccelerator *)accel)->name ) return ((V3270PFKeyAccelerator *)accel)->name; + break; } diff --git a/src/terminal/keyboard/init.c b/src/terminal/keyboard/init.c index 0ce16b7..1219410 100644 --- a/src/terminal/keyboard/init.c +++ b/src/terminal/keyboard/init.c @@ -99,7 +99,7 @@ for(ix = 0; actions[ix].name; ix++) { - if(actions[ix].keys) + if(actions[ix].keys && *actions[ix].keys) { size_t key; @@ -125,6 +125,16 @@ g_strfreev(keys); } + else + { + V3270Accelerator * accelerator = g_new0(V3270Accelerator,1); + + accelerator->type = V3270_ACCELERATOR_TYPE_LIB3270_ACTION; + accelerator->arg = (gconstpointer) &actions[ix]; + accelerator->activate = G_CALLBACK(fire_lib3270_action); + widget->accelerators = g_slist_prepend(widget->accelerators,accelerator); + + } } @@ -137,19 +147,17 @@ for(ix = 0; toggles[ix].name; ix++) { - if(toggles[ix].key) - { - V3270Accelerator * accelerator = g_new0(V3270Accelerator,1); + V3270Accelerator * accelerator = g_new0(V3270Accelerator,1); - accelerator->type = V3270_ACCELERATOR_TYPE_LIB3270_TOGGLE; - accelerator->arg = (gconstpointer) &toggles[ix]; - accelerator->activate = G_CALLBACK(fire_lib3270_toggle); + accelerator->type = V3270_ACCELERATOR_TYPE_LIB3270_TOGGLE; + accelerator->arg = (gconstpointer) &toggles[ix]; + accelerator->activate = G_CALLBACK(fire_lib3270_toggle); + if(toggles[ix].key) gtk_accelerator_parse(toggles[ix].key,&accelerator->key,&accelerator->mods); - widget->accelerators = g_slist_prepend(widget->accelerators,accelerator); + widget->accelerators = g_slist_prepend(widget->accelerators,accelerator); - } } } @@ -164,11 +172,11 @@ { V3270Accelerator * accelerator = g_new0(V3270Accelerator,1); - accelerator->type = V3270_ACCELERATOR_TYPE_INTERNAL; - accelerator->arg = (gconstpointer) &actions[ix]; - accelerator->activate = G_CALLBACK(actions[ix].activate); - accelerator->key = actions[ix].key; - accelerator->mods = actions[ix].mods; + accelerator->type = V3270_ACCELERATOR_TYPE_INTERNAL; + accelerator->arg = (gconstpointer) &actions[ix]; + accelerator->activate = G_CALLBACK(actions[ix].activate); + accelerator->key = actions[ix].key; + accelerator->mods = actions[ix].mods; widget->accelerators = g_slist_prepend(widget->accelerators,accelerator); diff --git a/src/terminal/keyboard/private.h b/src/terminal/keyboard/private.h index 1acd3a9..fb81161 100644 --- a/src/terminal/keyboard/private.h +++ b/src/terminal/keyboard/private.h @@ -32,7 +32,5 @@ #include #include - G_GNUC_INTERNAL void v3270_accelerator_map_sort(v3270 *widget); - G_GNUC_INTERNAL V3270Accelerator * v3270_accelerator_copy(const V3270Accelerator *accel); -- libgit2 0.21.2