This is an automated email from the git hooks/post-receive script.

git pushed a commit to branch master
in repository efm2.

View the commit online.

commit 3bf8c9745c0e8553b685a994557e54a302d39daf
Author: Carsten Haitzler (Rasterman) <ras...@rasterman.com>
AuthorDate: Thu May 29 08:53:50 2025 +0100

    add disabled flag for menu items
---
 src/efm/efm.c            |  4 +++
 src/efm/efm.h            |  3 +-
 src/efm/efm_dnd.c        |  6 ++--
 src/efm/efm_menu.c       | 31 ++++++++++---------
 src/efm/efm_popup_menu.c | 78 ++++++++++++++++++++++++++++--------------------
 src/efm/efm_private.h    | 45 +++++++++++++++-------------
 6 files changed, 95 insertions(+), 72 deletions(-)

diff --git a/src/efm/efm.c b/src/efm/efm.c
index 25c229a..8e25d55 100644
--- a/src/efm/efm.c
+++ b/src/efm/efm.c
@@ -2152,6 +2152,7 @@ static void _menu_create_walk(void *data, Evas_Object *obj, const Efm_Menu *m,
         case EFM_MENU_ITEM_NORMAL:
           it = elm_menu_item_add(o_menu, it_parent, NULL, mi->label,
                                  _cb_menu_item, mi);
+          if (mi->disabled) elm_object_item_disabled_set(it, EINA_TRUE);
           if (do_table)
             {
               o_table
@@ -2163,6 +2164,7 @@ static void _menu_create_walk(void *data, Evas_Object *obj, const Efm_Menu *m,
         case EFM_MENU_ITEM_SUBMENU:
           it = elm_menu_item_add(o_menu, it_parent, NULL, mi->label,
                                  NULL, NULL);
+          if (mi->disabled) elm_object_item_disabled_set(it, EINA_TRUE);
           if (do_table)
             {
               o_table
@@ -2179,6 +2181,7 @@ static void _menu_create_walk(void *data, Evas_Object *obj, const Efm_Menu *m,
         case EFM_MENU_ITEM_CHECK:
           it = elm_menu_item_add(o_menu, it_parent, NULL, mi->label,
                                  _cb_menu_item, mi);
+          if (mi->disabled) elm_object_item_disabled_set(it, EINA_TRUE);
           if (do_table)
             {
               o_table
@@ -2194,6 +2197,7 @@ static void _menu_create_walk(void *data, Evas_Object *obj, const Efm_Menu *m,
         case EFM_MENU_ITEM_RADIO:
           it = elm_menu_item_add(o_menu, it_parent, NULL, mi->label,
                                  _cb_menu_item, mi);
+          if (mi->disabled) elm_object_item_disabled_set(it, EINA_TRUE);
           if (do_table)
             {
               o_table
diff --git a/src/efm/efm.h b/src/efm/efm.h
index 30043fb..fc884bd 100644
--- a/src/efm/efm.h
+++ b/src/efm/efm.h
@@ -52,7 +52,8 @@ struct _Efm_Menu_Item
   const char        *label;
   const char        *icon;
   int                index;
-  Eina_Bool          selected;
+  Eina_Bool          disabled : 1;
+  Eina_Bool          selected : 1;
   Efm_Menu          *sub;
   void              *private1; // private to efm - ignore
   void              *private2; // private to efm - ignore
diff --git a/src/efm/efm_dnd.c b/src/efm/efm_dnd.c
index 6bfb638..f6de12e 100644
--- a/src/efm/efm_dnd.c
+++ b/src/efm/efm_dnd.c
@@ -368,9 +368,9 @@ _cb_drop(void *data, Evas_Object *o EINA_UNUSED, Elm_Selection_Data *ev)
     { // store tmp as urilist and pop up ask menu
       Efm_Menu *m
         = _efm_menu_add("What to do?", NULL, _cb_menu_dnd_ask_done, sd, NULL);
-      _efm_menu_it_normal(m, "Copy", "std:folder-copy", _cb_menu_dnd_drop_copy, sd, NULL);
-      _efm_menu_it_normal(m, "Move", "std:folder-move", _cb_menu_dnd_drop_move, sd, NULL);
-      _efm_menu_it_normal(m, "Link", "std:insert-link", _cb_menu_dnd_drop_link, sd, NULL);
+      _efm_menu_it_normal(m, "Copy", "std:folder-copy", EINA_FALSE, _cb_menu_dnd_drop_copy, sd, NULL);
+      _efm_menu_it_normal(m, "Move", "std:folder-move", EINA_FALSE, _cb_menu_dnd_drop_move, sd, NULL);
+      _efm_menu_it_normal(m, "Link", "std:insert-link", EINA_FALSE, _cb_menu_dnd_drop_link, sd, NULL);
       _efm_menu_show(sd->o_smart, m, sd->dnd_x, sd->dnd_y);
       sd->dnd_drop_data = tmp;
       printf("XXX: drop action modified to ask by modifier key\n");
diff --git a/src/efm/efm_menu.c b/src/efm/efm_menu.c
index 10cd4ec..f8a9055 100644
--- a/src/efm/efm_menu.c
+++ b/src/efm/efm_menu.c
@@ -2,8 +2,8 @@
 #include "efm_private.h"
 
 Efm_Menu *
-_efm_menu_add(const char *title, const char *icon, Efm_Menu_Callback cb,
-              void *data, void *data2)
+_efm_menu_add(const char *title, const char *icon,
+              Efm_Menu_Callback cb, void *data, void *data2)
 {
   Efm_Menu *m = calloc(1, sizeof(Efm_Menu));
 
@@ -51,7 +51,8 @@ _m_index(void)
 
 static Efm_Menu_Item *
 _mi_add(Efm_Menu *m, Efm_Menu_Item_Type type, const char *label,
-        const char *icon, Efm_Menu_Item_Callback cb, void *data, void *data2)
+        const char *icon, Eina_Bool disabled, Efm_Menu_Item_Callback cb,
+        void *data, void *data2)
 {
   Efm_Menu_Item *mi;
 
@@ -69,6 +70,7 @@ _mi_add(Efm_Menu *m, Efm_Menu_Item_Type type, const char *label,
   mi->index = _m_index();
   eina_stringshare_replace(&(mi->label), label);
   eina_stringshare_replace(&(mi->icon), icon);
+  mi->disabled = disabled;
   mi->private1 = cb;
   mi->private2 = data;
   mi->private3 = data2;
@@ -77,23 +79,24 @@ _mi_add(Efm_Menu *m, Efm_Menu_Item_Type type, const char *label,
 
 Efm_Menu_Item *
 _efm_menu_it_normal(Efm_Menu *m, const char *label, const char *icon,
-                    Efm_Menu_Item_Callback cb, void *data, void *data2)
+                    Eina_Bool disabled, Efm_Menu_Item_Callback cb, void *data,
+                    void *data2)
 {
-  return _mi_add(m, EFM_MENU_ITEM_NORMAL, label, icon, cb, data, data2);
+  return _mi_add(m, EFM_MENU_ITEM_NORMAL, label, icon, disabled, cb, data, data2);
 }
 
 Efm_Menu_Item *
 _efm_menu_it_separator(Efm_Menu *m)
 {
-  return _mi_add(m, EFM_MENU_ITEM_SEPARATOR, NULL, NULL, NULL, NULL, NULL);
+  return _mi_add(m, EFM_MENU_ITEM_SEPARATOR, NULL, NULL, EINA_FALSE, NULL, NULL, NULL);
 }
 
 Efm_Menu_Item *
 _efm_menu_it_sub(Efm_Menu *m, const char *label, const char *icon,
-                 Efm_Menu *sub)
+                 Eina_Bool disabled, Efm_Menu *sub)
 {
   Efm_Menu_Item *mi
-    = _mi_add(m, EFM_MENU_ITEM_SUBMENU, label, icon, NULL, NULL, NULL);
+    = _mi_add(m, EFM_MENU_ITEM_SUBMENU, label, icon, disabled, NULL, NULL, NULL);
 
   if (mi) mi->sub = sub;
   return mi;
@@ -101,11 +104,11 @@ _efm_menu_it_sub(Efm_Menu *m, const char *label, const char *icon,
 
 Efm_Menu_Item *
 _efm_menu_it_radio(Efm_Menu *m, const char *label, const char *icon,
-                   Eina_Bool on, Efm_Menu_Item_Callback cb, void *data,
-                   void *data2)
+                   Eina_Bool on, Eina_Bool disabled, Efm_Menu_Item_Callback cb,
+                   void *data, void *data2)
 {
   Efm_Menu_Item *mi
-    = _mi_add(m, EFM_MENU_ITEM_RADIO, label, icon, cb, data, data2);
+    = _mi_add(m, EFM_MENU_ITEM_RADIO, label, icon, disabled, cb, data, data2);
 
   if (mi) mi->selected = on;
   return mi;
@@ -113,11 +116,11 @@ _efm_menu_it_radio(Efm_Menu *m, const char *label, const char *icon,
 
 Efm_Menu_Item *
 _efm_menu_it_check(Efm_Menu *m, const char *label, const char *icon,
-                   Eina_Bool on, Efm_Menu_Item_Callback cb, void *data,
-                   void *data2)
+                   Eina_Bool on, Eina_Bool disabled, Efm_Menu_Item_Callback cb,
+                   void *data, void *data2)
 {
   Efm_Menu_Item *mi
-    = _mi_add(m, EFM_MENU_ITEM_CHECK, label, icon, cb, data, data2);
+    = _mi_add(m, EFM_MENU_ITEM_CHECK, label, icon, disabled, cb, data, data2);
 
   if (mi) mi->selected = on;
   return mi;
diff --git a/src/efm/efm_popup_menu.c b/src/efm/efm_popup_menu.c
index 5762b86..7a9a02d 100644
--- a/src/efm/efm_popup_menu.c
+++ b/src/efm/efm_popup_menu.c
@@ -309,8 +309,8 @@ _efm_popup_icon_menu_add(Smart_Data *sd, Icon *ic, Evas_Coord x, Evas_Coord y)
       ctx->mime = eina_stringshare_add(ic->info.mime);
     }
   m1 = _efm_menu_add("File", "std:file", _cb_menu_file_done, ctx, NULL);
-  _efm_menu_it_normal(m1, "Open", "std:document-open", _cb_menu_item_open, ctx,
-                      d_main);
+  _efm_menu_it_normal(m1, "Open", "std:document-open", EINA_FALSE,
+                      _cb_menu_item_open, ctx, d_main);
   {
     Efreet_Desktop *d;
     Eina_List      *mimes  = NULL;
@@ -319,7 +319,7 @@ _efm_popup_icon_menu_add(Smart_Data *sd, Icon *ic, Evas_Coord x, Evas_Coord y)
 
     // XXX: ask backend to fill in the menu or to augment it?
     m2 = _efm_menu_add("Open With", NULL, NULL, NULL, NULL);
-    _efm_menu_it_sub(m1, "Open With", NULL, m2);
+    _efm_menu_it_sub(m1, "Open With", NULL, EINA_FALSE, m2);
     ctx->d_main = d_main;
     if (d_main)
       {
@@ -332,8 +332,8 @@ _efm_popup_icon_menu_add(Smart_Data *sd, Icon *ic, Evas_Coord x, Evas_Coord y)
                 icon = buf;
               }
           }
-        _efm_menu_it_normal(m2, d_main->name, icon, _cb_menu_item_open, ctx,
-                            d_main);
+        _efm_menu_it_normal(m2, d_main->name, icon, EINA_FALSE,
+                            _cb_menu_item_open, ctx, d_main);
       }
     if (ic->info.mime) mimes = efreet_util_desktop_mime_list(ic->info.mime);
     if ((d_main) && (mimes)) _efm_menu_it_separator(m2);
@@ -354,52 +354,64 @@ _efm_popup_icon_menu_add(Smart_Data *sd, Icon *ic, Evas_Coord x, Evas_Coord y)
               icon = buf;
             }
         }
-      _efm_menu_it_normal(m2, d->name, icon, _cb_menu_item_open, ctx, d);
+      _efm_menu_it_normal(m2, d->name, icon, EINA_FALSE,
+                          _cb_menu_item_open, ctx, d);
       ctx->desktops = eina_list_append(ctx->desktops, d);
     }
     if ((d_main) || (mimes)) _efm_menu_it_separator(m2);
-    _efm_menu_it_normal(m2, "Select Other", NULL, _cb_menu_item_open_all, ctx,
-                        NULL);
+    _efm_menu_it_normal(m2, "Select Other", NULL, EINA_FALSE,
+                        _cb_menu_item_open_all, ctx, NULL);
   }
   // actions
   _efm_menu_it_separator(m1);
   {
     m2 = _efm_menu_add("Actions", NULL, NULL, NULL, NULL);
-    _efm_menu_it_sub(m1, "Actions", NULL, m2);
-    _efm_menu_it_normal(m2, "Cut", "std:edit-cut", _cb_menu_item_cut, ctx, NULL);
-    _efm_menu_it_normal(m2, "Copy", "std:edit-copy", _cb_menu_item_copy, ctx,
+    _efm_menu_it_sub(m1, "Actions", NULL,
+                     EINA_FALSE, m2);
+    _efm_menu_it_normal(m2, "Cut", "std:edit-cut",
+                        EINA_FALSE, _cb_menu_item_cut, ctx,
                         NULL);
-    _efm_menu_it_normal(m2, "Paste", "std:edit-paste", _cb_menu_item_paste, ctx,
+    _efm_menu_it_normal(m2, "Copy", "std:edit-copy",
+                        EINA_FALSE, _cb_menu_item_copy, ctx,
                         NULL);
-    _efm_menu_it_normal(m2, "Rename", "std:edit-rename", _cb_menu_item_rename,
+    _efm_menu_it_normal(m2, "Paste", "std:edit-paste",
+                        EINA_FALSE, _cb_menu_item_paste, ctx,
+                        NULL);
+    _efm_menu_it_normal(m2, "Rename", "std:edit-rename",
+                        EINA_FALSE, _cb_menu_item_rename,
                         ctx, NULL);
-    _efm_menu_it_normal(m2, "Trash", "std:delete", _cb_menu_item_trash, ctx,
+    _efm_menu_it_normal(m2, "Trash", "std:delete",
+                        EINA_FALSE, _cb_menu_item_trash, ctx,
                         NULL);
-    _efm_menu_it_normal(m2, "Delete", "std:close", _cb_menu_item_delete, ctx,
+    _efm_menu_it_normal(m2, "Delete", "std:close",
+                        EINA_FALSE, _cb_menu_item_delete, ctx,
                         NULL);
     _efm_menu_it_separator(m2);
     _efm_menu_it_normal(m2, "Properties", "std:document-properties",
-                        _cb_menu_item_props, ctx, NULL);
+                        EINA_FALSE, _cb_menu_item_props, ctx, NULL);
     _efm_menu_it_normal(m2, "Create Directory", "std:folder-new",
-                        _cb_menu_item_mkdir, ctx, NULL);
+                        EINA_FALSE, _cb_menu_item_mkdir, ctx, NULL);
   }
   _efm_menu_it_separator(m1);
   // view subdir
   {
     m2 = _efm_menu_add("View", NULL, NULL, NULL, NULL);
-    _efm_menu_it_sub(m1, "View", NULL, m2);
+    _efm_menu_it_sub(m1, "View", NULL, EINA_FALSE, m2);
     _efm_menu_it_normal(m2, "Select All", "std:edit-select-all",
-                        _cb_menu_item_sel_all, ctx, NULL);
+                        EINA_FALSE, _cb_menu_item_sel_all,
+                        ctx, NULL);
     _efm_menu_it_normal(m2, "Select None", NULL,
-                        _cb_menu_item_sel_none, ctx, NULL);
-    _efm_menu_it_normal(m2, "Refresh", "std:view-refresh",
+                        EINA_FALSE, _cb_menu_item_sel_none,
+                        ctx, NULL);
+    _efm_menu_it_normal(m2, "Refresh", "std:view-refresh", EINA_FALSE,
                         _cb_menu_item_refresh, ctx, NULL);
     // XXX: sort
    // XXX: show hidden
   }
   // XXX: need option to remove this for desktop icons
   _efm_menu_it_separator(m1);
-  _efm_menu_it_normal(m1, "Close", "std:window-close", _cb_menu_item_close, ctx,
+  _efm_menu_it_normal(m1, "Close", "std:window-close",
+                      EINA_FALSE, _cb_menu_item_close, ctx,
                       NULL);
   _efm_menu_show(ic->sd->o_smart, m1, x, y);
 
@@ -428,34 +440,34 @@ _efm_popup_main_menu_add(Smart_Data *sd, Evas_Coord x, Evas_Coord y)
   _efm_menu_it_separator(m1);
   {
     m2 = _efm_menu_add("Actions", NULL, NULL, NULL, NULL);
-    _efm_menu_it_sub(m1, "Actions", NULL, m2);
-    _efm_menu_it_normal(m2, "Paste", "std:edit-paste", _cb_menu_item_paste, ctx,
-                        NULL);
+    _efm_menu_it_sub(m1, "Actions", NULL, EINA_FALSE, m2);
+    _efm_menu_it_normal(m2, "Paste", "std:edit-paste", EINA_FALSE,
+                        _cb_menu_item_paste, ctx, NULL);
     _efm_menu_it_separator(m2);
     // XXX: this is properties of the DIR nmot file
     _efm_menu_it_normal(m2, "Properties", "std:document-properties",
-                        _cb_menu_item_props, ctx, NULL);
+                        EINA_FALSE, _cb_menu_item_props, ctx, NULL);
     _efm_menu_it_normal(m2, "Create Directory", "std:folder-new",
-                        _cb_menu_item_mkdir, ctx, NULL);
+                        EINA_FALSE, _cb_menu_item_mkdir, ctx, NULL);
   }
   _efm_menu_it_separator(m1);
   // view subdir
   {
     m2 = _efm_menu_add("View", NULL, NULL, NULL, NULL);
-    _efm_menu_it_sub(m1, "View", NULL, m2);
+    _efm_menu_it_sub(m1, "View", NULL, EINA_FALSE, m2);
     _efm_menu_it_normal(m2, "Select All", "std:edit-select-all",
-                        _cb_menu_item_sel_all, ctx, NULL);
+                        EINA_FALSE, _cb_menu_item_sel_all, ctx, NULL);
     _efm_menu_it_normal(m2, "Select None", NULL,
-                        _cb_menu_item_sel_none, ctx, NULL);
+                        EINA_FALSE, _cb_menu_item_sel_none, ctx, NULL);
     _efm_menu_it_normal(m2, "Refresh", "std:view-refresh",
-                        _cb_menu_item_refresh, ctx, NULL);
+                        EINA_FALSE, _cb_menu_item_refresh, ctx, NULL);
     // XXX: sort
     // XXX: show hidden
   }
   // XXX: need option to remove this for desktop icons
   _efm_menu_it_separator(m1);
-  _efm_menu_it_normal(m1, "Close", "std:window-close", _cb_menu_item_close, ctx,
-                      NULL);
+  _efm_menu_it_normal(m1, "Close", "std:window-close", EINA_FALSE,
+                      _cb_menu_item_close, ctx, NULL);
   _efm_menu_show(sd->o_smart, m1, x, y);
   return m1;
   //  const char  *icstr = _icon_strbuf_icon_def(ic, icbuf);
diff --git a/src/efm/efm_private.h b/src/efm/efm_private.h
index 4e440b6..6194f08 100644
--- a/src/efm/efm_private.h
+++ b/src/efm/efm_private.h
@@ -38,27 +38,30 @@ Eina_Bool _file_video_is(const char *file);
 #define MENU_SEPARATOR() \
     EFM_MENU_ITEM_SEPARATOR, NULL, NULL, 0, EINA_FALSE, NULL, NULL, NULL
 
-  void _efm_menu_show(Evas_Object *obj, Efm_Menu *m, Evas_Coord x,
-                      Evas_Coord y);
-
-  Efm_Menu      *_efm_menu_add(const char *title, const char *icon,
-                               Efm_Menu_Callback cb, void *data, void *data2);
-  void           _efm_menu_del(Efm_Menu *m);
-  Efm_Menu_Item *_efm_menu_it_normal(Efm_Menu *m, const char *label,
-                                     const char            *icon,
-                                     Efm_Menu_Item_Callback cb, void *data,
-                                     void *data2);
-  Efm_Menu_Item *_efm_menu_it_separator(Efm_Menu *m);
-  Efm_Menu_Item *_efm_menu_it_sub(Efm_Menu *m, const char *label,
-                                  const char *icon, Efm_Menu *sub);
-  Efm_Menu_Item *_efm_menu_it_radio(Efm_Menu *m, const char *label,
-                                    const char *icon, Eina_Bool on,
-                                    Efm_Menu_Item_Callback cb, void *data,
-                                    void *data2);
-  Efm_Menu_Item *_efm_menu_it_check(Efm_Menu *m, const char *label,
-                                    const char *icon, Eina_Bool on,
-                                    Efm_Menu_Item_Callback cb, void *data,
-                                    void *data2);
+  void
+  _efm_menu_show(Evas_Object *obj, Efm_Menu *m, Evas_Coord x, Evas_Coord y);
+  Efm_Menu *
+  _efm_menu_add(const char *title, const char *icon,
+                Efm_Menu_Callback cb, void *data, void *data2);
+  void
+  _efm_menu_del(Efm_Menu *m);
+  Efm_Menu_Item *
+  _efm_menu_it_normal(Efm_Menu *m, const char *label, const char *icon,
+                      Eina_Bool disabled, Efm_Menu_Item_Callback cb,
+                      void *data, void *data2);
+  Efm_Menu_Item *
+  _efm_menu_it_separator(Efm_Menu *m);
+  Efm_Menu_Item *
+  _efm_menu_it_sub(Efm_Menu *m, const char *label, const char *icon,
+                   Eina_Bool disabled, Efm_Menu *sub);
+  Efm_Menu_Item *
+  _efm_menu_it_radio(Efm_Menu *m, const char *label, const char *icon,
+                     Eina_Bool on, Eina_Bool disabled,
+                     Efm_Menu_Item_Callback cb, void *data, void *data2);
+  Efm_Menu_Item *
+  _efm_menu_it_check(Efm_Menu *m, const char *label, const char *icon,
+                     Eina_Bool on, Eina_Bool disabled,
+                     Efm_Menu_Item_Callback cb, void *data, void *data2);
 
   Efm_Menu *_efm_popup_icon_menu_add(Smart_Data *sd, Icon *ic, Evas_Coord x,
                                      Evas_Coord y);

-- 
To stop receiving notification emails like this one, please contact
the administrator of this repository.

Reply via email to