* 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"
g_signal_connect(menu, "destroy",
G_CALLBACK(gtk_widget_destroyed), menup);
for(int n = 0; n < nitems; ++n) {
- items[n].w = gtk_menu_item_new_with_label(items[n].name);
+ if(items[n].stock) {
+ GtkWidget *image = gtk_image_new_from_stock(items[n].stock,
+ GTK_ICON_SIZE_MENU);
+ items[n].w = gtk_image_menu_item_new_with_label(items[n].name);
+ gtk_image_menu_item_set_image(GTK_IMAGE_MENU_ITEM(items[n].w),
+ image);
+ } else
+ items[n].w = gtk_menu_item_new_with_label(items[n].name);
+ /* TODO accelerators would be useful here. There might be some
+ * interaction with the main menu accelerators, _except_ for playlist
+ * case! */
gtk_menu_attach(GTK_MENU(menu), items[n].w, 0, 1, n, n + 1);
}
set_tool_colors(menu);
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);
}
/*