Mercurial > pidgin.yaz
comparison pidgin/gtkstatusbox.c @ 23264:07aa8e4a262a
Arrow keys in status menu should skip separator lines. Closes #1360.
(it's unfortunate that good patches lie around for over a year :( )
committer: Sadrul Habib Chowdhury <imadil@gmail.com>
author | Elliott Sales de Andrade <qulogic@pidgin.im> |
---|---|
date | Sun, 01 Jun 2008 21:34:50 +0000 |
parents | f28047b68678 |
children | 74f1a07f452b |
comparison
equal
deleted
inserted
replaced
23263:b4ed2512be3b | 23264:07aa8e4a262a |
---|---|
1701 /* Restart the typing timeout if arrow keys are pressed while editing the message */ | 1701 /* Restart the typing timeout if arrow keys are pressed while editing the message */ |
1702 PidginStatusBox *status_box = data; | 1702 PidginStatusBox *status_box = data; |
1703 if (status_box->typing == 0) | 1703 if (status_box->typing == 0) |
1704 return; | 1704 return; |
1705 imhtml_changed_cb(NULL, status_box); | 1705 imhtml_changed_cb(NULL, status_box); |
1706 } | |
1707 | |
1708 static void | |
1709 treeview_cursor_changed_cb(GtkTreeView *treeview, gpointer data) | |
1710 { | |
1711 GtkTreeSelection *sel = gtk_tree_view_get_selection (treeview); | |
1712 GtkTreeModel *model = GTK_TREE_MODEL (data); | |
1713 GtkTreeIter iter; | |
1714 GtkTreePath *cursor; | |
1715 GtkTreePath *selection; | |
1716 gint cmp; | |
1717 | |
1718 if (gtk_tree_selection_get_selected (sel, NULL, &iter)) { | |
1719 if ((selection = gtk_tree_model_get_path (model, &iter)) == NULL) { | |
1720 /* Shouldn't happen, but ignore anyway */ | |
1721 return; | |
1722 } | |
1723 } else { | |
1724 /* I don't think this can happen, but we'll just ignore it */ | |
1725 return; | |
1726 } | |
1727 | |
1728 gtk_tree_view_get_cursor (treeview, &cursor, NULL); | |
1729 if (cursor == NULL) { | |
1730 /* Probably won't happen in a 'cursor-changed' event? */ | |
1731 gtk_tree_path_free (selection); | |
1732 return; | |
1733 } | |
1734 | |
1735 cmp = gtk_tree_path_compare (cursor, selection); | |
1736 if (cmp < 0) { | |
1737 /* The cursor moved up without moving the selection, so move it up again */ | |
1738 gtk_tree_path_prev (cursor); | |
1739 gtk_tree_view_set_cursor (treeview, cursor, NULL, FALSE); | |
1740 } else if (cmp > 0) { | |
1741 /* The cursor moved down without moving the selection, so move it down again */ | |
1742 gtk_tree_path_next (cursor); | |
1743 gtk_tree_view_set_cursor (treeview, cursor, NULL, FALSE); | |
1744 } | |
1745 | |
1746 gtk_tree_path_free (selection); | |
1747 gtk_tree_path_free (cursor); | |
1706 } | 1748 } |
1707 | 1749 |
1708 static void | 1750 static void |
1709 pidgin_status_box_init (PidginStatusBox *status_box) | 1751 pidgin_status_box_init (PidginStatusBox *status_box) |
1710 { | 1752 { |
1867 g_signal_connect(G_OBJECT(status_box), "scroll_event", G_CALLBACK(combo_box_scroll_event_cb), NULL); | 1909 g_signal_connect(G_OBJECT(status_box), "scroll_event", G_CALLBACK(combo_box_scroll_event_cb), NULL); |
1868 g_signal_connect(G_OBJECT(status_box->imhtml), "scroll_event", | 1910 g_signal_connect(G_OBJECT(status_box->imhtml), "scroll_event", |
1869 G_CALLBACK(imhtml_scroll_event_cb), status_box->imhtml); | 1911 G_CALLBACK(imhtml_scroll_event_cb), status_box->imhtml); |
1870 g_signal_connect(G_OBJECT(status_box->popup_window), "button_release_event", G_CALLBACK(treeview_button_release_cb), status_box); | 1912 g_signal_connect(G_OBJECT(status_box->popup_window), "button_release_event", G_CALLBACK(treeview_button_release_cb), status_box); |
1871 g_signal_connect(G_OBJECT(status_box->popup_window), "key_press_event", G_CALLBACK(treeview_key_press_event), status_box); | 1913 g_signal_connect(G_OBJECT(status_box->popup_window), "key_press_event", G_CALLBACK(treeview_key_press_event), status_box); |
1914 g_signal_connect(G_OBJECT(status_box->tree_view), "cursor-changed", | |
1915 G_CALLBACK(treeview_cursor_changed_cb), status_box->dropdown_store); | |
1872 | 1916 |
1873 #if GTK_CHECK_VERSION(2,6,0) | 1917 #if GTK_CHECK_VERSION(2,6,0) |
1874 gtk_tree_view_set_row_separator_func(GTK_TREE_VIEW(status_box->tree_view), dropdown_store_row_separator_func, NULL, NULL); | 1918 gtk_tree_view_set_row_separator_func(GTK_TREE_VIEW(status_box->tree_view), dropdown_store_row_separator_func, NULL, NULL); |
1875 #endif | 1919 #endif |
1876 | 1920 |