discomfitor pushed a commit to branch master.

commit 32b73d0f3465ef746c63efb7ea1daa145a7efd48
Author: Mike Blumenkrantz <[email protected]>
Date:   Wed Jun 12 09:16:03 2013 +0100

    qa mod no longer loads before first border evals, so make post-module load 
callback fill in non-transient entries
---
 src/modules/quickaccess/e_mod_quickaccess.c | 43 ++++++++++++++++++++++-------
 1 file changed, 33 insertions(+), 10 deletions(-)

diff --git a/src/modules/quickaccess/e_mod_quickaccess.c 
b/src/modules/quickaccess/e_mod_quickaccess.c
index be66404..92f2883 100644
--- a/src/modules/quickaccess/e_mod_quickaccess.c
+++ b/src/modules/quickaccess/e_mod_quickaccess.c
@@ -96,18 +96,22 @@ _e_qa_entry_find_border(const E_Border *bd)
 }
 
 static E_Quick_Access_Entry *
-_e_qa_entry_find_match_stringshared(const char *name, const char *class)
+_e_qa_entry_find_match_stringshared(const char *name, const char *class, 
Eina_Bool nontrans)
 {
    E_Quick_Access_Entry *entry;
    const Eina_List *n;
-   EINA_LIST_FOREACH(qa_config->transient_entries, n, entry)
+
+   if (!nontrans)
      {
-        if (entry->win) continue;
-        if (entry->class != class) continue;
-        /* no entry name matches all */
-        if ((entry->name) && (entry->name != name)) continue;
+        EINA_LIST_FOREACH(qa_config->transient_entries, n, entry)
+          {
+             if (entry->win) continue;
+             if (entry->class != class) continue;
+             /* no entry name matches all */
+             if ((entry->name) && (entry->name != name)) continue;
 
-        return entry;
+             return entry;
+          }
      }
    EINA_LIST_FOREACH(qa_config->entries, n, entry)
      {
@@ -123,14 +127,14 @@ _e_qa_entry_find_match_stringshared(const char *name, 
const char *class)
 }
 
 static E_Quick_Access_Entry *
-_e_qa_entry_find_match(const E_Border *bd)
+_e_qa_entry_find_match(const E_Border *bd, Eina_Bool nontrans)
 {
    const char *name, *class;
    E_Quick_Access_Entry *entry;
 
    name = bd->client.icccm.name;
    class = bd->client.icccm.class;
-   entry = _e_qa_entry_find_match_stringshared(name, class);
+   entry = _e_qa_entry_find_match_stringshared(name, class, nontrans);
 
    return entry;
 }
@@ -520,7 +524,7 @@ _e_qa_border_eval_pre_post_fetch_cb(void *data __UNUSED__, 
void *border)
    if ((!bd->client.icccm.class) || (!bd->client.icccm.class[0])) return;
    if ((!bd->client.icccm.name) || (!bd->client.icccm.name[0])) return;
 
-   entry = _e_qa_entry_find_match(bd);
+   entry = _e_qa_entry_find_match(bd, 0);
    if (!entry) return;
    DBG("border=%p matches entry %s", bd, entry->id);
    _e_qa_entry_border_associate(entry, bd);
@@ -542,6 +546,7 @@ _e_qa_event_module_init_end_cb(void *data __UNUSED__, int 
type __UNUSED__, void
    Eina_List *l, *ll;
    E_Quick_Access_Entry *entry;
    unsigned int count;
+   E_Border *bd;
    /* assume that by now, e has successfully placed all windows */
    count = eina_list_count(qa_config->transient_entries);
    EINA_LIST_FOREACH_SAFE(qa_config->transient_entries, l, ll, entry)
@@ -559,6 +564,7 @@ _e_qa_event_module_init_end_cb(void *data __UNUSED__, int 
type __UNUSED__, void
      }
    if (count != eina_list_count(qa_config->transient_entries)) 
e_bindings_reset();
    qa_running = EINA_TRUE;
+   count = 0;
    EINA_LIST_FOREACH(qa_config->entries, l, entry)
      {
         if (entry->config.relaunch && (!entry->border))
@@ -566,6 +572,23 @@ _e_qa_event_module_init_end_cb(void *data __UNUSED__, int 
type __UNUSED__, void
              DBG("qa window for relaunch entry %s not present, starting", 
entry->id);
              _e_qa_border_new(entry);
           }
+        if (entry->border) continue;
+        count++;
+     }
+   if (count)
+     {
+        /* some non-transient entries exist without assigned borders
+         * try assigning from existing borders
+         */
+        EINA_LIST_FOREACH(e_border_client_list(), l, bd)
+          {
+             entry = _e_qa_entry_find_match(bd, 1);
+             if ((!entry) || entry->border) continue;
+             DBG("border=%p matches entry %s", bd, entry->id);
+             _e_qa_entry_border_associate(entry, bd);
+             count--;
+             if (!count) break;
+          }
      }
    return ECORE_CALLBACK_RENEW;
 }

-- 

------------------------------------------------------------------------------
This SF.net email is sponsored by Windows:

Build for Windows Store.

http://p.sf.net/sfu/windows-dev2dev

Reply via email to