kwo pushed a commit to branch master.

http://git.enlightenment.org/e16/e16.git/commit/?id=7011dc150da9490e7921a41cd57b392218e0df17

commit 7011dc150da9490e7921a41cd57b392218e0df17
Author: Kim Woelders <k...@woelders.dk>
Date:   Sat Feb 8 06:36:03 2020 +0100

    Hide Group struct internals
---
 src/finders.c    | 37 +++------------------------
 src/groups.c     | 77 ++++++++++++++++++++++++++++++++++++++++++++++++++++++--
 src/groups.h     | 32 +++++------------------
 src/menus-misc.c | 20 +++++++--------
 src/snaps.c      |  9 +++----
 5 files changed, 97 insertions(+), 78 deletions(-)

diff --git a/src/finders.c b/src/finders.c
index 1e9a793c..b14dbf14 100644
--- a/src/finders.c
+++ b/src/finders.c
@@ -1,6 +1,6 @@
 /*
  * Copyright (C) 2000-2007 Carsten Haitzler, Geoff Harrison and various 
contributors
- * Copyright (C) 2008-2019 Kim Woelders
+ * Copyright (C) 2008-2020 Kim Woelders
  *
  * Permission is hereby granted, free of charge, to any person obtaining a copy
  * of this software and associated documentation files (the "Software"), to
@@ -259,39 +259,8 @@ ListWinGroupMembersForEwin(const EWin * ewin, int action, 
char nogroup,
        if (!grp)
           continue;
 
-       switch (action)
-         {
-         case GROUP_ACTION_SET_WINDOW_BORDER:
-            if (!grp->cfg.set_border)
-               continue;
-            break;
-         case GROUP_ACTION_ICONIFY:
-            if (!grp->cfg.iconify)
-               continue;
-            break;
-         case GROUP_ACTION_MOVE:
-            if (!grp->cfg.move)
-               continue;
-            break;
-         case GROUP_ACTION_STACKING:
-            if (!grp->cfg.raise)
-               continue;
-            break;
-         case GROUP_ACTION_STICK:
-            if (!grp->cfg.stick)
-               continue;
-            break;
-         case GROUP_ACTION_SHADE:
-            if (!grp->cfg.shade)
-               continue;
-            break;
-         case GROUP_ACTION_KILL:
-            if (!grp->cfg.kill)
-               continue;
-            break;
-         default:
-            break;
-         }
+       if (!GroupMatchAction(grp, action))
+          continue;
 
       do_add:
        gwins = EREALLOC(EWin *, gwins, gwcnt + 1);
diff --git a/src/groups.c b/src/groups.c
index 8d8f4f7f..56e5b9c4 100644
--- a/src/groups.c
+++ b/src/groups.c
@@ -1,6 +1,6 @@
 /*
  * Copyright (C) 2000-2007 Carsten Haitzler, Geoff Harrison and various 
contributors
- * Copyright (C) 2004-2018 Kim Woelders
+ * Copyright (C) 2004-2020 Kim Woelders
  *
  * Permission is hereby granted, free of charge, to any person obtaining a copy
  * of this software and associated documentation files (the "Software"), to
@@ -40,10 +40,33 @@
 
 #define USE_GROUP_SHOWHIDE 1   /* Enable group borders */
 
+#define GROUP_SELECT_ALL             0
+#define GROUP_SELECT_EWIN_ONLY       1
+#define GROUP_SELECT_ALL_EXCEPT_EWIN 2
+
 #define SET_OFF    0
 #define SET_ON     1
 #define SET_TOGGLE 2
 
+typedef struct _groupconfig {
+   char                iconify;
+   char                kill;
+   char                move;
+   char                raise;
+   char                set_border;
+   char                shade;
+   char                stick;
+} GroupConfig;
+
+struct _group {
+   dlist_t             list;
+   int                 index;
+   EWin              **members;
+   int                 num_members;
+   GroupConfig         cfg;
+   char                save;   /* Used in snapshot - must save */
+};
+
 static              LIST_HEAD(group_list);
 
 static struct {
@@ -126,8 +149,22 @@ GroupFind(int gid)
    return LIST_FIND(Group, &group_list, GroupMatchId, INT2PTR(gid));
 }
 
+EWin               *const *
+GroupGetMembers(const Group * g, int *num)
+{
+   *num = g->num_members;
+   return g->members;
+}
+
+int
+GroupRemember(Group * g)
+{
+   g->save = 1;
+   return g->index;
+}
+
 void
-GroupRemember(int gid)
+GroupRememberByGid(int gid)
 {
    Group              *g;
 
@@ -138,6 +175,42 @@ GroupRemember(int gid)
    g->save = 1;
 }
 
+int
+GroupMatchAction(const Group * g, int action)
+{
+   int                 match;
+
+   switch (action)
+     {
+     default:
+       match = 0;
+       break;
+     case GROUP_ACTION_SET_WINDOW_BORDER:
+       match = g->cfg.set_border;
+       break;
+     case GROUP_ACTION_ICONIFY:
+       match = g->cfg.iconify;
+       break;
+     case GROUP_ACTION_MOVE:
+       match = g->cfg.move;
+       break;
+     case GROUP_ACTION_STACKING:
+       match = g->cfg.raise;
+       break;
+     case GROUP_ACTION_STICK:
+       match = g->cfg.stick;
+       break;
+     case GROUP_ACTION_SHADE:
+       match = g->cfg.shade;
+       break;
+     case GROUP_ACTION_KILL:
+       match = g->cfg.kill;
+       break;
+     }
+
+   return match;
+}
+
 static Group       *
 GroupFind2(const char *groupid)
 {
diff --git a/src/groups.h b/src/groups.h
index 324aa752..6a3653b7 100644
--- a/src/groups.h
+++ b/src/groups.h
@@ -1,6 +1,6 @@
 /*
  * Copyright (C) 2000-2007 Carsten Haitzler, Geoff Harrison and various 
contributors
- * Copyright (C) 2004-2013 Kim Woelders
+ * Copyright (C) 2004-2020 Kim Woelders
  *
  * Permission is hereby granted, free of charge, to any person obtaining a copy
  * of this software and associated documentation files (the "Software"), to
@@ -23,12 +23,8 @@
  */
 #ifndef _GROUPS_H_
 #define _GROUPS_H_
-#include "ewins.h"
-#include "list.h"
 
-#define GROUP_SELECT_ALL             0
-#define GROUP_SELECT_EWIN_ONLY       1
-#define GROUP_SELECT_ALL_EXCEPT_EWIN 2
+#include "etypes.h"
 
 /* For window group listing */
 #define GROUP_ACTION_ANY                     0
@@ -40,30 +36,15 @@
 #define GROUP_ACTION_SHADE                   6
 #define GROUP_ACTION_SET_WINDOW_BORDER       7
 
-typedef struct _groupconfig {
-   char                iconify;
-   char                kill;
-   char                move;
-   char                raise;
-   char                set_border;
-   char                shade;
-   char                stick;
-} GroupConfig;
-
-struct _group {
-   dlist_t             list;
-   int                 index;
-   EWin              **members;
-   int                 num_members;
-   GroupConfig         cfg;
-   char                save;   /* Used in snapshot - must save */
-};
-
 /* finders.c */
 EWin              **ListWinGroupMembersForEwin(const EWin * ewin, int action,
                                               char nogroup, int *num);
 
 /* groups.c */
+int                 GroupMatchAction(const Group * g, int action);
+int                 GroupRemember(Group * g);
+void                GroupRememberByGid(int gid);
+EWin               *const *GroupGetMembers(const Group * g, int *num);
 Group              *const *EwinGetGroups(const EWin * ewin, int *num);
 Group              *EwinsInGroup(const EWin * ewin1, const EWin * ewin2);
 void                GroupsEwinAdd(EWin * ewin, const int *pgid, int ngid);
@@ -72,6 +53,5 @@ void                GroupsLoad(void);
 void                GroupsSave(void);
 Group             **GroupsGetList(int *pnum);
 int                 GroupsGetSwapmove(void);
-void                GroupRemember(int gid);
 
 #endif /* _GROUPS_H_ */
diff --git a/src/menus-misc.c b/src/menus-misc.c
index 4fd565a3..b0749094 100644
--- a/src/menus-misc.c
+++ b/src/menus-misc.c
@@ -1,6 +1,6 @@
 /*
  * Copyright (C) 2000-2007 Carsten Haitzler, Geoff Harrison and various 
contributors
- * Copyright (C) 2004-2018 Kim Woelders
+ * Copyright (C) 2004-2020 Kim Woelders
  *
  * Permission is hereby granted, free of charge, to any person obtaining a copy
  * of this software and associated documentation files (the "Software"), to
@@ -574,7 +574,8 @@ MenuLoadFromGroups(Menu * m)
 {
    Menu               *mm;
    Group             **lst;
-   int                 i, j, num;
+   EWin               *const *ewlst;
+   int                 i, j, num, ewnum;
    char                s[256];
    MenuItem           *mi;
 
@@ -586,24 +587,23 @@ MenuLoadFromGroups(Menu * m)
 
    for (i = 0; i < num; i++)
      {
+       ewlst = GroupGetMembers(lst[i], &ewnum);
+
        mm = MenuCreate("__SUBMENUGROUP_E", NULL, m, NULL);
 
-       Esnprintf(s, sizeof(s), "gop %i showhide",
-                 EwinGetClientXwin(lst[i]->members[0]));
+       Esnprintf(s, sizeof(s), "gop %i showhide", EwinGetClientXwin(ewlst[0]));
        mi = MenuItemCreate(_("Show/Hide this group"), NULL, s, NULL);
 
-       Esnprintf(s, sizeof(s), "wop %#x ic",
-                 EwinGetClientXwin(lst[i]->members[0]));
+       Esnprintf(s, sizeof(s), "wop %#x ic", EwinGetClientXwin(ewlst[0]));
        MenuAddItem(mm, mi);
        mi = MenuItemCreate(_("Iconify this group"), NULL, s, NULL);
        MenuAddItem(mm, mi);
 
-       for (j = 0; j < lst[i]->num_members; j++)
+       for (j = 0; j < ewnum; j++)
          {
             Esnprintf(s, sizeof(s), "wop %#x focus",
-                      EwinGetClientXwin(lst[i]->members[j]));
-            mi = MenuItemCreate(EwinGetTitle(lst[i]->members[j]), NULL,
-                                s, NULL);
+                      EwinGetClientXwin(ewlst[j]));
+            mi = MenuItemCreate(EwinGetTitle(ewlst[j]), NULL, s, NULL);
             MenuAddItem(mm, mi);
          }
        Esnprintf(s, sizeof(s), _("Group %i"), i);
diff --git a/src/snaps.c b/src/snaps.c
index c700dc7d..369d68f5 100644
--- a/src/snaps.c
+++ b/src/snaps.c
@@ -1,6 +1,6 @@
 /*
  * Copyright (C) 2000-2007 Carsten Haitzler, Geoff Harrison and various 
contributors
- * Copyright (C) 2004-2018 Kim Woelders
+ * Copyright (C) 2004-2020 Kim Woelders
  *
  * Permission is hereby granted, free of charge, to any person obtaining a copy
  * of this software and associated documentation files (the "Software"), to
@@ -418,10 +418,7 @@ _SnapUpdateEwinGroups(Snapshot * sn, const EWin * ewin, 
char onoff)
             EFREE_SET(sn->groups, EMALLOC(int, num_groups));
 
             for (j = 0; j < num_groups; j++)
-              {
-                 sn->groups[j] = groups[j]->index;
-                 groups[j]->save = 1;
-              }
+               sn->groups[j] = GroupRemember(groups[j]);
          }
        else
          {
@@ -1355,7 +1352,7 @@ _SnapshotsLoad(FILE * fs)
                  sn->groups = EREALLOC(int, sn->groups, sn->num_groups);
 
                  sn->groups[sn->num_groups - 1] = atoi(s);
-                 GroupRemember(sn->groups[sn->num_groups - 1]);
+                 GroupRememberByGid(sn->groups[sn->num_groups - 1]);
               }
 #if USE_COMPOSITE
             else if (!strcmp(buf, "OPACITY"))

-- 


Reply via email to