* This file is part of DisOrder
* Copyright (C) 2008 Richard Kettlewell
*
- * This program is free software; you can redistribute it and/or modify
+ * This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
+ * the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
- * This program is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * General Public License for more details.
- *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
* You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
- * USA
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+/** @file disobedience/popup.c
+ * @brief Disobedience popup menus
*/
#include "disobedience.h"
#include "popup.h"
event->button, event->time);
}
-/** @brief Make sure that something is selected
- * @param widget Tree view
- * @param event Mouse event (the hovered row will be selected)
+/** @brief Make sure the right thing is selected
+ * @param treeview Tree view
+ * @param event Mouse event
*/
void ensure_selected(GtkTreeView *treeview,
GdkEventButton *event) {
GtkTreeSelection *selection = gtk_tree_view_get_selection(treeview);
- if(gtk_tree_selection_count_selected_rows(selection) == 0) {
- GtkTreePath *path;
- if(gtk_tree_view_get_path_at_pos(treeview,
- event->x, event->y,
- &path,
- NULL,
- NULL, NULL))
- gtk_tree_selection_select_path(selection, path);
- gtk_tree_path_free(path);
+ /* Get the path of the hovered item */
+ GtkTreePath *path;
+ if(!gtk_tree_view_get_path_at_pos(treeview,
+ event->x, event->y,
+ &path,
+ NULL,
+ NULL, NULL))
+ return; /* If there isn't one, do nothing */
+ if(!gtk_tree_selection_path_is_selected(selection, path)) {
+ /* We're hovered over one thing but it's not the selected row. This is
+ * very confusing for the poor old user so we select the hovered row. */
+ gtk_tree_selection_unselect_all(selection);
+ gtk_tree_selection_select_path(selection, path);
}
+ gtk_tree_path_free(path);
}
/*