Changeset 20
- Timestamp:
- 01/22/07 17:28:44 (2 years ago)
- Files:
-
- osso-xterm/trunk/configure.ac (modified) (1 diff)
- osso-xterm/trunk/debian/changelog (modified) (1 diff)
- osso-xterm/trunk/etc/osso-xterm.schemas (modified) (1 diff)
- osso-xterm/trunk/src/terminal-app.c (modified) (8 diffs)
- osso-xterm/trunk/src/terminal-gconf.h (modified) (1 diff)
- osso-xterm/trunk/src/terminal-widget.c (modified) (14 diffs)
- osso-xterm/trunk/src/terminal-widget.h (modified) (2 diffs)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
osso-xterm/trunk/configure.ac
r19 r20 1 AC_INIT([osso-xterm],[0.13.mh1 5])1 AC_INIT([osso-xterm],[0.13.mh16]) 2 2 3 3 dnl Initialize automake osso-xterm/trunk/debian/changelog
r19 r20 1 osso-xterm (0.13.mh16) unstable; urgency=low 2 3 * Make toolbar shortcuts configurable. 4 5 -- Santtu Lakkala <inz@inz.fi> Mon, 22 Jan 2007 17:28:15 +0200 6 1 7 osso-xterm (0.13.mh15) unstable; urgency=low 2 8 osso-xterm/trunk/etc/osso-xterm.schemas
r18 r20 33 33 </schema> 34 34 <schema> 35 <key>/schemas/apps/osso/xterm/ screenkeys</key>36 <applyto>/apps/osso/xterm/ screenkeys</applyto>35 <key>/schemas/apps/osso/xterm/keys</key> 36 <applyto>/apps/osso/xterm/keys</applyto> 37 37 <owner>osso-xterm</owner> 38 <type>bool</type> 39 <default>true</default> 38 <type>list</type> 39 <list_type>string</list_type> 40 <default>[Page_Up, Page_Down, <ctrl>p, <ctrl>n, <ctrl>a\,p, <ctrl>a\,n]</default> 40 41 <locale name="C"> 41 <short>Show screen keys in toolbar</short> 42 <short>Keys shown in toolbar</short> 43 </locale> 44 </schema> 45 <schema> 46 <key>/schemas/apps/osso/xterm/key_labels</key> 47 <applyto>/apps/osso/xterm/key_labels</applyto> 48 <owner>osso-xterm</owner> 49 <type>list</type> 50 <list_type>string</list_type> 51 <default>[PgUp, PgDn, Ctrl-p, Ctrl-n, Ctrl-ap, Ctrl-an]</default> 52 <locale name="C"> 53 <short>Labels for keys in toolbar</short> 42 54 </locale> 43 55 </schema> osso-xterm/trunk/src/terminal-app.c
r19 r20 96 96 static void terminal_app_action_toolbar (GtkToggleAction *action, 97 97 TerminalApp *app); 98 static void terminal_app_action_screenkeys (GtkToggleAction *action,99 TerminalApp *app);100 98 static void terminal_app_action_prev_tab (GtkAction *action, 101 99 TerminalApp *app); … … 170 168 { "scrollbar", NULL, N_ ("Scrollbar"), NULL, NULL, G_CALLBACK (terminal_app_action_scrollbar), TRUE }, 171 169 { "toolbar", NULL, N_ ("Toolbar"), NULL, NULL, G_CALLBACK (terminal_app_action_toolbar), TRUE }, 172 { "screenkeys", NULL, N_ ("Screen keys"), NULL, NULL, G_CALLBACK (terminal_app_action_screenkeys), TRUE },173 170 }; 174 171 … … 187 184 " <menuitem action='scrollbar'/>" 188 185 " <menuitem action='toolbar'/>" 189 " <menuitem action='screenkeys'/>"190 186 " <menuitem action='fullscreen'/>" 191 187 " <separator/>" … … 277 273 attach_item(parent, actiongroup, accelgroup, "scrollbar"); 278 274 attach_item(parent, actiongroup, accelgroup, "toolbar"); 279 attach_item(parent, actiongroup, accelgroup, "screenkeys");280 275 attach_item(parent, actiongroup, accelgroup, "fullscreen"); 281 276 gtk_menu_shell_append(GTK_MENU_SHELL(parent), … … 415 410 gchar *role; 416 411 gint font_size; 417 gboolean scrollbar, toolbar, screenkeys,reverse;412 gboolean scrollbar, toolbar, reverse; 418 413 GConfClient *gconf_client; 419 414 GConfValue *gconf_value; … … 471 466 if (gconf_value->type == GCONF_VALUE_BOOL) 472 467 toolbar = gconf_value_get_bool(gconf_value); 473 gconf_value_free(gconf_value);474 }475 476 gconf_value = gconf_client_get(gconf_client,477 OSSO_XTERM_GCONF_SCREENKEYS,478 &error);479 480 if (error != NULL) {481 g_printerr("Unable to get screenkeys setting from gconf: %s\n",482 error->message);483 g_error_free(error);484 error = NULL;485 }486 screenkeys = OSSO_XTERM_DEFAULT_SCREENKEYS;487 if (gconf_value) {488 if (gconf_value->type == GCONF_VALUE_BOOL)489 screenkeys = gconf_value_get_bool(gconf_value);490 468 gconf_value_free(gconf_value); 491 469 } … … 533 511 action = gtk_action_group_get_action(app->action_group, "toolbar"); 534 512 gtk_toggle_action_set_active(GTK_TOGGLE_ACTION(action), toolbar); 535 536 action = gtk_action_group_get_action(app->action_group, "screenkeys");537 gtk_toggle_action_set_active(GTK_TOGGLE_ACTION(action), screenkeys);538 513 539 514 action = gtk_action_group_get_action(app->action_group, "reverse"); … … 947 922 948 923 static void 949 terminal_app_action_screenkeys (GtkToggleAction *action,950 TerminalApp *app)951 {952 GConfClient *client;953 gboolean show;954 955 client = gconf_client_get_default();956 show = gtk_toggle_action_get_active (action);957 958 gconf_client_set_bool (client,959 OSSO_XTERM_GCONF_SCREENKEYS,960 show,961 NULL);962 963 g_object_unref(G_OBJECT(client));964 }965 966 static void967 924 terminal_app_action_scrollbar (GtkToggleAction *action, 968 925 TerminalApp *app) osso-xterm/trunk/src/terminal-gconf.h
r18 r20 55 55 #define OSSO_XTERM_DEFAULT_TOOLBAR TRUE 56 56 57 /* Boolean */ 58 #define OSSO_XTERM_GCONF_SCREENKEYS OSSO_XTERM_GCONF_PATH "/screenkeys" 59 #define OSSO_XTERM_DEFAULT_SCREENKEYS TRUE 57 /* List of strings */ 58 #define OSSO_XTERM_GCONF_KEYS OSSO_XTERM_GCONF_PATH "/keys" 59 60 /* List of strings */ 61 #define OSSO_XTERM_GCONF_KEY_LABELS OSSO_XTERM_GCONF_PATH "/key_labels" 60 62 61 63 /* Boolean */ osso-xterm/trunk/src/terminal-widget.c
r18 r20 128 128 GConfEntry *entry, 129 129 TerminalWidget *widget); 130 static void terminal_widget_gconf_ screenkeys (GConfClient *client,130 static void terminal_widget_gconf_keys (GConfClient *client, 131 131 guint conn_id, 132 132 GConfEntry *entry, … … 147 147 static void terminal_widget_update_tool_bar (TerminalWidget *widget, 148 148 gboolean show); 149 static void terminal_widget_update_screen_keys (TerminalWidget *widget, 150 gboolean show); 149 static void terminal_widget_update_keys (TerminalWidget *widget, 150 GSList *keys, 151 GSList *key_labels); 151 152 static void terminal_widget_update_colors (TerminalWidget *widget, 152 153 const gchar *fg_name, … … 163 164 static void terminal_widget_ctrlify_notify (GtkToggleToolButton *item, 164 165 TerminalWidget *widget); 165 static void terminal_widget_next_window (GtkToolButton *button, 166 static void terminal_widget_do_keys (TerminalWidget *widget, 167 const gchar *key_string); 168 static void terminal_widget_do_key_button (GObject *button, 166 169 TerminalWidget *widget); 167 static void terminal_widget_prev_window (GtkToolButton *button,168 TerminalWidget *widget);169 170 170 171 171 static GObjectClass *parent_class; … … 302 302 gboolean scrollbar; 303 303 gboolean toolbar; 304 gboolean screenkeys; 304 GSList *keys; 305 GSList *key_labels; 305 306 GConfValue *gconf_value; 306 307 … … 329 330 widget, 330 331 NULL, &err); 331 widget->screenkeys_conid = gconf_client_notify_add(widget->gconf_client, 332 OSSO_XTERM_GCONF_SCREENKEYS, 333 (GConfClientNotifyFunc)terminal_widget_gconf_screenkeys, 332 widget->keys_conid = gconf_client_notify_add(widget->gconf_client, 333 OSSO_XTERM_GCONF_KEYS, 334 (GConfClientNotifyFunc)terminal_widget_gconf_keys, 335 widget, 336 NULL, &err); 337 widget->key_labels_conid = gconf_client_notify_add(widget->gconf_client, 338 OSSO_XTERM_GCONF_KEY_LABELS, 339 (GConfClientNotifyFunc)terminal_widget_gconf_keys, 334 340 widget, 335 341 NULL, &err); … … 444 450 NULL); 445 451 widget->cbutton = gtk_toggle_tool_button_new(); 452 gtk_tool_item_set_expand(widget->cbutton, TRUE); 446 453 gtk_tool_button_set_label(GTK_TOOL_BUTTON(widget->cbutton), "C"); 447 454 gtk_widget_show(GTK_WIDGET(widget->cbutton)); … … 454 461 widget); 455 462 456 widget->nbutton = gtk_tool_button_new(NULL, ">");457 458 g_signal_connect (G_OBJECT(widget->nbutton), "clicked",459 G_CALLBACK(terminal_widget_next_window),460 widget);461 462 widget->pbutton = gtk_tool_button_new(NULL, "<");463 464 g_signal_connect (G_OBJECT(widget->pbutton), "clicked",465 G_CALLBACK(terminal_widget_prev_window),466 widget);467 468 gtk_toolbar_insert(GTK_TOOLBAR(widget->tbar),469 widget->pbutton,470 -1);471 gtk_toolbar_insert(GTK_TOOLBAR(widget->tbar),472 widget->nbutton,473 -1);474 463 gtk_toolbar_insert(GTK_TOOLBAR(widget->tbar), 475 464 widget->cbutton, … … 509 498 } 510 499 511 gconf_value = gconf_client_get(widget->gconf_client, 512 OSSO_XTERM_GCONF_SCREENKEYS, 500 keys = gconf_client_get_list(widget->gconf_client, 501 OSSO_XTERM_GCONF_KEYS, 502 GCONF_VALUE_STRING, 513 503 &err); 514 if (err != NULL) { 515 g_printerr("Unable to get toolbar setting from gconf: %s\n", 516 err->message); 517 g_clear_error(&err); 518 } 519 screenkeys = OSSO_XTERM_DEFAULT_SCREENKEYS; 520 if (gconf_value) { 521 if (gconf_value->type == GCONF_VALUE_BOOL) 522 screenkeys = gconf_value_get_bool(gconf_value); 523 gconf_value_free(gconf_value); 524 } 504 key_labels = gconf_client_get_list(widget->gconf_client, 505 OSSO_XTERM_GCONF_KEY_LABELS, 506 GCONF_VALUE_STRING, 507 &err); 525 508 526 509 terminal_widget_update_scrolling_bar(TERMINAL_WIDGET(widget), scrollbar); 527 510 terminal_widget_update_tool_bar(TERMINAL_WIDGET(widget), toolbar); 528 terminal_widget_update_screen_keys(TERMINAL_WIDGET(widget), screenkeys); 511 terminal_widget_update_keys(TERMINAL_WIDGET(widget), keys, key_labels); 512 513 g_slist_foreach(keys, (GFunc)g_free, NULL); 514 g_slist_foreach(key_labels, (GFunc)g_free, NULL); 515 g_slist_free(keys); 516 g_slist_free(key_labels); 517 529 518 terminal_widget_gconf_font_size(widget->gconf_client, 0, NULL, widget); 530 519 terminal_widget_gconf_reverse (widget->gconf_client, 0, NULL, widget); … … 585 574 widget->toolbar_conid); 586 575 gconf_client_notify_remove(widget->gconf_client, 587 widget->screenkeys_conid); 576 widget->keys_conid); 577 gconf_client_notify_remove(widget->gconf_client, 578 widget->key_labels_conid); 588 579 gconf_client_notify_remove(widget->gconf_client, 589 580 widget->font_name_conid); … … 1079 1070 1080 1071 static void 1081 terminal_widget_update_screen_keys (TerminalWidget *widget, gboolean show) 1082 { 1083 if (show) { 1084 gtk_widget_show (GTK_WIDGET(widget->nbutton)); 1085 gtk_widget_show (GTK_WIDGET(widget->pbutton)); 1086 } 1087 else { 1088 gtk_widget_hide (GTK_WIDGET(widget->nbutton)); 1089 gtk_widget_hide (GTK_WIDGET(widget->pbutton)); 1090 } 1072 terminal_widget_update_keys (TerminalWidget *widget, GSList *keys, GSList *key_labels) 1073 { 1074 g_slist_foreach(widget->keys, (GFunc)gtk_widget_destroy, NULL); 1075 g_slist_free(widget->keys); 1076 widget->keys = NULL; 1077 guint i = 0; 1078 1079 while (keys && key_labels) { 1080 GtkToolItem *button = gtk_tool_button_new(NULL, 1081 key_labels->data); 1082 /* GtkToolItem *separator = gtk_separator_tool_item_new(); */ 1083 g_object_set_data_full(G_OBJECT(button), "keys", g_strdup(keys->data), g_free); 1084 /* g_object_set_data_full(G_OBJECT(button), "separator", separator, (GDestroyNotify)gtk_widget_destroy); */ 1085 1086 gtk_tool_item_set_expand(button, TRUE); 1087 gtk_toolbar_insert(GTK_TOOLBAR(widget->tbar), 1088 button, i++); 1089 /* gtk_toolbar_insert(GTK_TOOLBAR(widget->tbar), 1090 separator, i++); */ 1091 1092 gtk_widget_show(GTK_WIDGET(button)); 1093 /* gtk_widget_show(GTK_WIDGET(separator)); */ 1094 1095 g_signal_connect(G_OBJECT(button), 1096 "clicked", 1097 G_CALLBACK(terminal_widget_do_key_button), 1098 widget); 1099 1100 widget->keys = g_slist_append(widget->keys, 1101 button); 1102 1103 keys = g_slist_next(keys); 1104 key_labels = g_slist_next(key_labels); 1105 } 1091 1106 } 1092 1107 … … 1142 1157 1143 1158 static void 1144 terminal_widget_gconf_ screenkeys(GConfClient *client,1159 terminal_widget_gconf_keys(GConfClient *client, 1145 1160 guint conn_id, 1146 1161 GConfEntry *entry, 1147 1162 TerminalWidget *widget) { 1148 1163 GConfValue *value; 1149 gboolean screenkeys; 1164 GSList *keys; 1165 GSList *key_labels; 1166 GSList *freeme; 1150 1167 1151 1168 value = gconf_entry_get_value(entry); 1152 screenkeys = gconf_value_get_bool(value); 1153 terminal_widget_update_screen_keys(widget, screenkeys); 1169 1170 if (!strcmp(entry->key, OSSO_XTERM_GCONF_KEYS)) { 1171 keys = gconf_value_get_list(value); 1172 freeme = key_labels = gconf_client_get_list(client, 1173 OSSO_XTERM_GCONF_KEY_LABELS, 1174 GCONF_VALUE_STRING, 1175 NULL); 1176 } else { 1177 key_labels = gconf_value_get_list(value); 1178 freeme = keys = gconf_client_get_list(client, 1179 OSSO_XTERM_GCONF_KEYS, 1180 GCONF_VALUE_STRING, 1181 NULL); 1182 } 1183 1184 terminal_widget_update_keys(widget, keys, key_labels); 1185 1186 g_slist_foreach(freeme, (GFunc)g_free, NULL); 1187 g_slist_free(freeme); 1154 1188 } 1155 1189 … … 1681 1715 static void 1682 1716 terminal_widget_send_key(TerminalWidget *widget, 1683 const char *str,1717 guint keyval, 1684 1718 guint state) 1685 1719 { … … 1691 1725 key->time = GDK_CURRENT_TIME; 1692 1726 key->state = state; 1693 key->keyval = gdk_keyval_from_name(str);1727 key->keyval = keyval; 1694 1728 gdk_event_put ((GdkEvent *) key); 1695 1729 … … 1702 1736 } 1703 1737 1704 static void 1705 terminal_widget_next_window (GtkToolButton *button, 1706 TerminalWidget *widget) 1707 { 1708 terminal_widget_send_key(widget, "a", GDK_CONTROL_MASK); 1709 terminal_widget_send_key(widget, "n", 0); 1710 } 1711 1712 static void 1713 terminal_widget_prev_window (GtkToolButton *button, 1714 TerminalWidget *widget) 1715 { 1716 terminal_widget_send_key(widget, "a", GDK_CONTROL_MASK); 1717 terminal_widget_send_key(widget, "p", 0); 1718 } 1738 static const struct { 1739 const gchar *name; 1740 GdkModifierType mask; 1741 } modifier_table[11] = { 1742 { "shift", GDK_SHIFT_MASK }, 1743 { "lock", GDK_LOCK_MASK }, 1744 { "ctrl", GDK_CONTROL_MASK }, 1745 { "control", GDK_CONTROL_MASK }, 1746 { "mod1", GDK_MOD1_MASK }, 1747 { "alt", GDK_MOD1_MASK }, 1748 { "mod2", GDK_MOD2_MASK }, 1749 { "mod3", GDK_MOD3_MASK }, 1750 { "mod4", GDK_MOD4_MASK }, 1751 { "mod5", GDK_MOD5_MASK }, 1752 { NULL, 0 } 1753 }; 1754 1755 static GdkModifierType get_mask(const gchar *name, const gchar *end) { 1756 int i; 1757 1758 for (i = 0; modifier_table[i].name; i++) { 1759 if (!strncmp(name, modifier_table[i].name, end - name)) { 1760 break; 1761 } 1762 } 1763 return modifier_table[i].mask; 1764 } 1765 1766 static const gchar *parse_key(const gchar *source, 1767 guint *keyval, 1768 guint *state) 1769 { 1770 const gchar *tag_start = NULL; 1771 const gchar *key_start = NULL; 1772 1773 if (!source || !keyval || !state) { 1774 return NULL; 1775 } 1776 1777 *keyval = 0; 1778 *state = 0; 1779 1780 while (*source) { 1781 switch (*source) { 1782 case '<': 1783 if (!tag_start) { 1784 tag_start = source + 1; 1785 } 1786 break; 1787 case '>': 1788 if (tag_start) { 1789 *state |= get_mask(tag_start, source - 1); 1790 tag_start = NULL; 1791 } else { 1792 key_start = source; 1793 } 1794 break; 1795 case '\\': 1796 if (!key_start) { 1797 key_start = source + 1; 1798 } 1799 break; 1800 case ',': 1801 case ' ': 1802 case '\t': 1803 case '\n': 1804 case '\r': 1805 if (key_start && !tag_start) { 1806 gchar *temp = g_strndup(key_start, 1807 source - key_start); 1808 *keyval = gdk_keyval_from_name(temp); 1809 g_free(temp); 1810 return source + 1; 1811 } 1812 break; 1813 default: 1814 if (!tag_start && !key_start) { 1815 key_start = source; 1816 } 1817 break; 1818 } 1819 source++; 1820 } 1821 if (key_start) { 1822 *keyval = gdk_keyval_from_name(key_start); 1823 return source; 1824 } 1825 } 1826 1827 static void terminal_widget_do_keys(TerminalWidget *widget, 1828 const gchar *key_string) 1829 { 1830 guint keyval = 0; 1831 guint state = 0; 1832 1833 while (key_string && *key_string) { 1834 key_string = parse_key(key_string, &keyval, &state); 1835 terminal_widget_send_key(widget, keyval, state); 1836 } 1837 } 1838 static void terminal_widget_do_key_button(GObject *button, 1839 TerminalWidget *widget) 1840 { 1841 terminal_widget_do_keys(widget, g_object_get_data(button, "keys")); 1842 } osso-xterm/trunk/src/terminal-widget.h
r18 r20 54 54 GtkWidget *tbar; 55 55 GtkToolItem *cbutton; 56 GtkToolItem *nbutton; 57 GtkToolItem *pbutton; 56 GSList *keys; 58 57 59 58 GPid pid; … … 66 65 guint scrollbar_conid; 67 66 guint toolbar_conid; 68 guint screenkeys_conid; 67 guint keys_conid; 68 guint key_labels_conid; 69 69 guint font_size_conid; 70 70 guint font_base_size_conid;
