Strip scheme from URI menu://applications/... on launcher creation.
authorAndriy Grytsenko <andrej@rep.kiev.ua>
Mon, 17 Oct 2016 18:23:32 +0000 (21:23 +0300)
committerAndriy Grytsenko <andrej@rep.kiev.ua>
Mon, 17 Oct 2016 18:23:32 +0000 (21:23 +0300)
"app.desktop" should be used instead of "menu://applications/Other/app.desktop".

ChangeLog
TODO
plugins/launchtaskbar.c
plugins/task-button.c

index 2d056ab..ddf06b8 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
 * Implemented "lxpanelctl command ..." to send message to panel plugin.
 * Added APIs for PanelIconGrid to draw focus on drop.
 * Converted launch button into widget class for more easy management.
-* Adjusted PanelIconGrid: min spacing is now 1, no_window flag is now left
-    unset by default, spacing is taken into account on overall size to be
-    consistent on chosen orientation.
+* Adjusted PanelIconGrid: min spacing is now 1, no_window flag is now
+    left unset by default, spacing is taken into account on overall size
+    to be consistent on chosen orientation.
 * Implemented dropping file or folder onto launch bar to create launcher.
 * Implemented dragging launchers around launchbars (between panels too).
-* Implemented dropping file/folder on free panel space to create launcher.
+* Implemented dropping file or folder onto free panel space to create
+    launcher.
 * Implemented dragging launchers from launchbar to some free panel space.
     When launcher dropped onto another place and former place's launchbar
     becomes empty, it will not be replaced with a bootstrapping icon (as
-    it happens when you remove last launcher via configuration dialog) but
-    launchbar will be removed from panel instead, that is more obvious and
-    sensible.
+    it happens when last launcher is removed via configuration dialog)
+    but launchbar will be removed from the panel instead, that behavior
+    is more obvious and sensible.
+* Added stripping scheme from URI menu://applications/... when a launcher
+    is created, only menu-id itself should be used.
 
 0.8.2
 -------------------------------------------------------------------------
diff --git a/TODO b/TODO
index 5d9333a..82b6d8c 100644 (file)
--- a/TODO
+++ b/TODO
@@ -1,7 +1,6 @@
 * drag & drop plugins via middle button
 * "Move" option in plugin context menu
 * LXPanelPluginInit::activatable flag to allow activation with hotkey
-* drag & drop launchers (LauncherButton widget as "application/x-lxpanel-launcher")
 * accessibility (keys-only; single-button-mouse; special devices)
 * 'volumealsa' improvements
 * compose new custom launcher in launchbar config dialog
@@ -23,3 +22,5 @@
 * pull improvements from Raspbian
 * add Most Recent support into 'menu' plugin
 * check and use weather-* standard themed icons for weather plugin
+* "Remove this Launch Button" option in launchbar context menu
+* 'usb-unmount' plugin
index e8b946f..8a21c92 100644 (file)
@@ -357,7 +357,11 @@ static gboolean on_launchbar_drag_source(GtkWidget *widget, GdkEvent *event,
     GtkWidget *btn;
     PanelIconGridDropPosition pos;
     FmFileInfo *fi;
+    GdkWindow *win;
     gdouble x, y;
+#if !GTK_CHECK_VERSION(2, 22, 0)
+    gint px, py;
+#endif
 
     switch (event->type)
     {
@@ -370,17 +374,24 @@ static gboolean on_launchbar_drag_source(GtkWidget *widget, GdkEvent *event,
             break;
         /* check if it is a launcher where the drag begins */
         ig = PANEL_ICON_GRID(widget);
-        if (event->button.window == gtk_widget_get_window(widget))
+        win = event->button.window;
+        x = event->button.x;
+        y = event->button.y;
+        while (win != NULL && win != gtk_widget_get_window(widget))
         {
-            x = event->button.x;
-            y = event->button.y;
-        }
-        else
-        {
-            /* event really comes for child, not for grid, why? */
-            gdk_window_coords_to_parent(event->button.window, event->button.x,
-                                        event->button.y, &x, &y);
+#if GTK_CHECK_VERSION(2, 22, 0)
+            gdk_window_coords_to_parent(win, x, y, &x, &y);
+            win = gdk_window_get_effective_parent(win);
+#else
+            gdk_window_get_position(win, &px, &py);
+            x += px;
+            y += py;
+            win = gdk_window_get_parent(win);
+#endif
         }
+        if (win == NULL)
+            /* this should never happen */
+            break;
         if (!panel_icon_grid_get_dest_at_pos(ig, (int)x, (int)y, &btn, &pos) ||
             !PANEL_IS_LAUNCH_BUTTON(btn) || pos != PANEL_ICON_GRID_DROP_INTO)
             break;
@@ -565,7 +576,10 @@ static void on_launchbar_drag_data_received(GtkWidget *widget,
             path = fm_path_new_for_str(path_str);
             /* create new LaunchButton */
             s = config_group_add_subgroup(lb->settings, "Button");
-            config_group_set_string(s, "id", path_str);
+            if (fm_path_equal(fm_path_get_scheme_path(path), fm_path_get_apps_menu()))
+                config_group_set_string(s, "id", fm_path_get_basename(path));
+            else
+                config_group_set_string(s, "id", path_str);
             btn = GTK_WIDGET(launch_button_new(lb->panel, lb->plugin, path, s));
             fm_path_unref(path);
             if (btn)
@@ -691,11 +705,16 @@ static gboolean on_launchbar_files_dropped(FmDndDest *dd, int x, int y, GdkDragA
     default:
         return FALSE;
     }
-    path_str = fm_path_to_str(path);
-    /* g_debug("*** path '%s' pos %d", path_str, i); */
     s = config_group_add_subgroup(lb->settings, "Button");
-    config_group_set_string(s, "id", path_str);
-    g_free(path_str);
+    if (fm_path_equal(fm_path_get_scheme_path(path), fm_path_get_apps_menu()))
+        config_group_set_string(s, "id", fm_path_get_basename(path));
+    else
+    {
+        path_str = fm_path_to_str(path);
+        /* g_debug("*** path '%s' pos %d", path_str, i); */
+        config_group_set_string(s, "id", path_str);
+        g_free(path_str);
+    }
     btn = launch_button_new(lb->panel, lb->plugin, path, s);
     if (btn)
     {
@@ -1182,13 +1201,18 @@ static void _launchbar_configure_add(GtkTreeView *menu_view, LaunchTaskBarPlugin
             COL_BTN, btn,
             -1);
         g_object_unref(pix);
-        path = fm_path_to_str(sel_path);
-        /* g_debug("*** path '%s'",path); */
         settings = config_group_add_subgroup(ltbp->settings, "Button");
-        config_group_set_string(settings, "id", path);
+        if (fm_path_equal(fm_path_get_scheme_path(sel_path), fm_path_get_apps_menu()))
+            config_group_set_string(settings, "id", fm_path_get_basename(sel_path));
+        else
+        {
+            path = fm_path_to_str(sel_path);
+            /* g_debug("*** path '%s'",path); */
+            config_group_set_string(settings, "id", path);
+            g_free(path);
+        }
         launch_button_set_settings(btn, settings);
         lxpanel_config_save(ltbp->panel);
-        g_free(path);
         fm_path_unref(sel_path);
         launchbar_remove_bootstrap(ltbp);
     }
index 2d6c74b..d0a260d 100644 (file)
@@ -453,6 +453,7 @@ static GtkWidget *get_task_button_menu(TaskButton *tb, TaskDetails *task)
                 gtk_widget_set_sensitive(item->data, i != task->desktop);
         g_list_free(items);
     }
+    //FIXME: do the same for 'All workspaces' item
 
     return menu;
 }