- fixed e_remember_default_match to set match values
authorHannes Janetzek <hannes.janetzek@gmail.com>
Sat, 12 Sep 2009 11:08:07 +0000 (11:08 +0000)
committerHannes Janetzek <hannes.janetzek@gmail.com>
Sat, 12 Sep 2009 11:08:07 +0000 (11:08 +0000)
  since these are not set by e_remember_update anymore
- remove E_Remember parameter from e_remmber_update.
  if update is possible bd->remember is already set
- do not overwrite bordername value of remember on update.
  should only be set by conf_border dialog
- make sure on update that match values are set otherwise
  delete remember

SVN revision: 42435

src/bin/e_border.c
src/bin/e_int_border_locks.c
src/bin/e_int_border_menu.c
src/bin/e_int_border_remember.c
src/bin/e_remember.c
src/bin/e_remember.h
src/modules/conf_borders/e_int_config_borders.c

index 786adfc..a8d65b6 100644 (file)
@@ -670,8 +670,7 @@ e_border_zone_set(E_Border *bd, E_Zone *zone)
    ecore_event_add(E_EVENT_BORDER_ZONE_SET, ev, _e_border_event_border_zone_set_free, NULL);
 
    ecore_x_window_prop_card32_set(bd->client.win, E_ATOM_ZONE, &bd->zone->num, 1);
-   if (bd->remember)
-     e_remember_update(bd->remember, bd);
+   e_remember_update(bd);
 }
 
 EAPI void
@@ -713,8 +712,7 @@ e_border_desk_set(E_Border *bd, E_Desk *desk)
             e_border_desk_set(child, bd->desk);
          }
      }
-   if (bd->remember)
-     e_remember_update(bd->remember, bd);
+   e_remember_update(bd);
 }
 
 EAPI void
@@ -1311,8 +1309,7 @@ e_border_raise(E_Border *bd)
      }
 
    ecore_event_add(E_EVENT_BORDER_STACK, ev, _e_border_event_border_stack_free, NULL);
-   if (bd->remember)
-     e_remember_update(bd->remember, bd);
+   e_remember_update(bd);
 }
 
 EAPI void
@@ -1397,8 +1394,7 @@ e_border_lower(E_Border *bd)
      }
 
    ecore_event_add(E_EVENT_BORDER_STACK, ev, _e_border_event_border_stack_free, NULL);
-   if (bd->remember)
-     e_remember_update(bd->remember, bd);
+   e_remember_update(bd);
 }
 
 EAPI void
@@ -1452,8 +1448,7 @@ e_border_stack_above(E_Border *bd, E_Border *above)
      }
 
    ecore_event_add(E_EVENT_BORDER_STACK, ev, _e_border_event_border_stack_free, NULL);
-   if (bd->remember)
-     e_remember_update(bd->remember, bd);
+   e_remember_update(bd);
 }
 
 EAPI void
@@ -1507,8 +1502,7 @@ e_border_stack_below(E_Border *bd, E_Border *below)
      }
 
    ecore_event_add(E_EVENT_BORDER_STACK, ev, _e_border_event_border_stack_free, NULL);
-   if (bd->remember)
-     e_remember_update(bd->remember, bd);
+   e_remember_update(bd);
 }
 
 EAPI void
@@ -1918,8 +1912,7 @@ e_border_shade(E_Border *bd, E_Direction dir)
          }
 
      }
-   if (bd->remember)
-     e_remember_update(bd->remember, bd);
+   e_remember_update(bd);
 }
 
 EAPI void
@@ -2027,8 +2020,7 @@ e_border_unshade(E_Border *bd, E_Direction dir)
          }
 
      }
-   if (bd->remember)
-     e_remember_update(bd->remember, bd);
+   e_remember_update(bd);
 }
 
 EAPI void
@@ -2188,8 +2180,7 @@ e_border_maximize(E_Border *bd, E_Maximize max)
                                     bd->maximized & E_MAXIMIZE_VERTICAL);
        
      }
-   if (bd->remember)
-     e_remember_update(bd->remember, bd);
+     e_remember_update(bd);
 }
 
 EAPI void
@@ -2284,8 +2275,7 @@ e_border_unmaximize(E_Border *bd, E_Maximize max)
        e_hints_window_maximized_set(bd, bd->maximized & E_MAXIMIZE_HORIZONTAL,
                                     bd->maximized & E_MAXIMIZE_VERTICAL);
      }
-   if (bd->remember)
-     e_remember_update(bd->remember, bd);
+   e_remember_update(bd);
 }
 
 EAPI void
@@ -2379,8 +2369,7 @@ e_border_fullscreen(E_Border *bd, E_Fullscreen policy)
        bd->client.border.changed = 1;
        bd->changed = 1;
      }
-   if (bd->remember)
-     e_remember_update(bd->remember, bd);
+   e_remember_update(bd);
 }
 
 EAPI void
@@ -2414,8 +2403,7 @@ e_border_unfullscreen(E_Border *bd)
        bd->client.border.changed = 1;
        bd->changed = 1;
      }
-   if (bd->remember)
-     e_remember_update(bd->remember, bd);
+   e_remember_update(bd);
 }
 
 EAPI void
@@ -2454,8 +2442,7 @@ e_border_iconify(E_Border *bd)
             e_border_iconify(child);
          }
      }
-   if (bd->remember)
-     e_remember_update(bd->remember, bd);
+   e_remember_update(bd);
 }
 
 EAPI void
@@ -2497,8 +2484,7 @@ e_border_uniconify(E_Border *bd)
             e_border_uniconify(child);
          }
      }
-   if (bd->remember)
-     e_remember_update(bd->remember, bd);
+   e_remember_update(bd);
 }
 
 EAPI void
@@ -2531,8 +2517,7 @@ e_border_stick(E_Border *bd)
    e_object_ref(E_OBJECT(bd));
 //   e_object_breadcrumb_add(E_OBJECT(bd), "border_stick_event");
    ecore_event_add(E_EVENT_BORDER_STICK, ev, _e_border_event_border_stick_free, NULL);
-   if (bd->remember)
-     e_remember_update(bd->remember, bd);
+   e_remember_update(bd);
 }
 
 EAPI void
@@ -2566,8 +2551,7 @@ e_border_unstick(E_Border *bd)
    ecore_event_add(E_EVENT_BORDER_UNSTICK, ev, _e_border_event_border_unstick_free, NULL);
 
    e_border_desk_set(bd, e_desk_current_get(bd->zone));
-   if (bd->remember)
-     e_remember_update(bd->remember, bd);
+   e_remember_update(bd);
 }
 
 EAPI void
@@ -6346,8 +6330,8 @@ _e_border_eval0(E_Border *bd)
          }
      }
    
-   if ((bd->remember) && (rem_change))
-     e_remember_update(bd->remember, bd);
+   if (rem_change)
+     e_remember_update(bd);
    
    if (change_urgent)
      {
@@ -7226,8 +7210,8 @@ _e_border_eval(E_Border *bd)
        bd->need_fullscreen = 0;
      }
  
-   if ((bd->remember) && (rem_change))
-     e_remember_update(bd->remember, bd);
+   if (rem_change)
+     e_remember_update(bd);
 
    if (send_event) // FIXME: send only if a property changed - above need to
      // check on that. for now - always send.
index 59bb7e0..e5a20b0 100644 (file)
@@ -192,8 +192,8 @@ _basic_apply_data(E_Config_Dialog *cfd, E_Config_Dialog_Data *cfdata)
        if (cfdata->border->remember)
          {
             cfdata->border->remember->apply |= E_REMEMBER_APPLY_LOCKS;
-             cfdata->border->remember->match = e_remember_default_match(cfdata->border);
-            e_remember_update(cfdata->border->remember, cfdata->border);
+             e_remember_default_match_set(cfdata->border->remember, cfdata->border);
+            e_remember_update(cfdata->border);
          }
      }
    else
@@ -252,8 +252,8 @@ _advanced_apply_data(E_Config_Dialog *cfd, E_Config_Dialog_Data *cfdata)
        if (cfdata->border->remember)
          {
             cfdata->border->remember->apply |= E_REMEMBER_APPLY_LOCKS;
-             cfdata->border->remember->match = e_remember_default_match(cfdata->border);
-            e_remember_update(cfdata->border->remember, cfdata->border);
+             e_remember_default_match_set(cfdata->border->remember, cfdata->border);
+            e_remember_update(cfdata->border);
          }
      }
    else
index d814980..e923647 100644 (file)
@@ -674,7 +674,7 @@ _e_border_menu_cb_skip_winlist(void *data, E_Menu *m, E_Menu_Item *mi)
    else
      bd->user_skip_winlist = 0;
    bd->changed = 1;
-   if (bd->remember) e_remember_update(bd->remember, bd);
+   e_remember_update(bd);
 }
 
 static void
@@ -689,7 +689,7 @@ _e_border_menu_cb_skip_pager(void *data, E_Menu *m, E_Menu_Item *mi)
    else
      bd->client.netwm.state.skip_pager = 0;
    bd->changed = 1;
-   if (bd->remember) e_remember_update(bd->remember, bd);
+   e_remember_update(bd);
 }
 
 static void
@@ -704,7 +704,7 @@ _e_border_menu_cb_skip_taskbar(void *data, E_Menu *m, E_Menu_Item *mi)
    else
      bd->client.netwm.state.skip_taskbar = 0;
    bd->changed = 1;
-   if (bd->remember) e_remember_update(bd->remember, bd);
+   e_remember_update(bd);
 }
 
 static void 
index 96cf07c..ac2b729 100644 (file)
@@ -435,7 +435,7 @@ _basic_apply_data(E_Config_Dialog *cfd, E_Config_Dialog_Data *cfdata)
 
    if (rem)
      {
-       rem->match = e_remember_default_match(cfdata->border);
+       e_remember_default_match_set(rem, cfdata->border);
 
        if (cfdata->mode == MODE_GEOMETRY)
          rem->apply = E_REMEMBER_APPLY_POS | E_REMEMBER_APPLY_SIZE;
@@ -453,10 +453,12 @@ _basic_apply_data(E_Config_Dialog *cfd, E_Config_Dialog_Data *cfdata)
        cfdata->remember.apply_desktop_file = 0;
        _remember_update(rem, cfdata);
        _check_matches(cfdata, 1);
-       e_remember_update(rem, cfdata->border);
+
+       cfdata->border->remember = rem;
+       e_remember_update(cfdata->border);
      }
 
-   cfdata->border->remember = rem;
+
 
    e_config_save_queue();
    return 1; /* Apply was OK */
@@ -583,10 +585,10 @@ _advanced_apply_data(E_Config_Dialog *cfd, E_Config_Dialog_Data *cfdata)
        if (cfdata->remember.set_focus_on_start) rem->apply |= E_REMEMBER_SET_FOCUS_ON_START;
 
        _remember_update(rem, cfdata);
-       cfdata->border->remember = rem;
        _check_matches(cfdata, 1);
        rem->keep_settings = 0;
-       e_remember_update(rem, cfdata->border);
+       cfdata->border->remember = rem;
+       e_remember_update(cfdata->border);
        rem->keep_settings = cfdata->remember.keep_settings;
      }
 
index 37e43d9..92ae028 100644 (file)
@@ -135,6 +135,8 @@ e_remember_del(E_Remember *rem)
          }
        return;
      }
+   else
+     _e_remember_free(rem); 
 }
 
 EAPI E_Remember *
@@ -192,40 +194,67 @@ e_remember_match_update(E_Remember *rem)
 }
 
 EAPI int
-e_remember_default_match(E_Border *bd)
+e_remember_default_match_set(E_Remember *rem, E_Border *bd)
 {
+   const char *title, *clasz, *name, *role;
+   
+   if (rem->name) eina_stringshare_del(rem->name);
+   if (rem->class) eina_stringshare_del(rem->class);
+   if (rem->title) eina_stringshare_del(rem->title);
+   if (rem->role) eina_stringshare_del(rem->role);
+   rem->name = NULL;
+   rem->class = NULL;
+   rem->title = NULL;
+   rem->role = NULL;
+
+   name = bd->client.icccm.name;
+   if (!name || name[0] == 0) name = NULL;
+   clasz = bd->client.icccm.class;
+   if (!clasz || clasz[0] == 0) clasz = NULL;
+   role = bd->client.icccm.window_role;
+   if (!role || role[0] == 0) role = NULL;
+   
    int match = E_REMEMBER_MATCH_TRANSIENT;
-   if ((bd->client.icccm.name) &&
-        (bd->client.icccm.class) &&
-        (bd->client.icccm.name[0] != 0) &&
-        (bd->client.icccm.class[0] != 0))
-     match |= E_REMEMBER_MATCH_NAME | E_REMEMBER_MATCH_CLASS;
-   else
-     if ((e_border_name_get(bd))[0] != 0)
-       match |= E_REMEMBER_MATCH_TITLE;
-
-   if ((bd->client.icccm.window_role) &&
-        (bd->client.icccm.window_role[0] != 0))
-     match |= E_REMEMBER_MATCH_ROLE;
-
-   if (bd->client.netwm.type != ECORE_X_WINDOW_TYPE_UNKNOWN)
-     match |= E_REMEMBER_MATCH_TYPE;
+   if (name && clasz)
+     {
+       match |= E_REMEMBER_MATCH_NAME | E_REMEMBER_MATCH_CLASS;
+       rem->name = eina_stringshare_add(name);
+       rem->class = eina_stringshare_add(clasz);
+     }
+   else if ((title = e_border_name_get(bd)) && title[0])
+     {
+       match |= E_REMEMBER_MATCH_TITLE;
+       rem->title = eina_stringshare_add(title);
+     }   
+   if (role)
+     {
+       match |= E_REMEMBER_MATCH_ROLE;
+       rem->role = eina_stringshare_add(role);
+     }
 
+   rem->match = match;
+   
    return match;
 }
 
 EAPI void
-e_remember_update(E_Remember *rem, E_Border *bd)
+e_remember_update(E_Border *bd)
 {
-   if (!rem) return;
+   E_Remember *rem;
+   
    if (bd->new_client) return;
+   if (!bd->remember) return;
+   if (bd->remember->keep_settings) return;
+   
+   rem = bd->remember;
 
-   if (bd->remember && bd->remember->keep_settings)
-     return;
-
-   if (rem->prop.border) eina_stringshare_del(rem->prop.border);
-   rem->prop.border = NULL;
-
+   if (!(rem->name  || rem->class ||
+        rem->title || rem->role))
+     {
+       e_remember_del(rem); 
+       return;
+     }
+   
    e_remember_match_update(rem);
 
    rem->type = bd->client.netwm.type;
@@ -252,15 +281,9 @@ e_remember_update(E_Remember *rem, E_Border *bd)
        rem->prop.res_y = bd->zone->h;
        rem->prop.pos_w = bd->client.w;
        rem->prop.pos_h = bd->client.h;
-
        rem->prop.w = bd->client.w;
        rem->prop.h = bd->client.h;
-
        rem->prop.layer = bd->layer;
-
-       if (bd->bordername)
-         rem->prop.border = eina_stringshare_add(bd->bordername);
-
        rem->prop.fullscreen = bd->fullscreen;
      }
 
@@ -720,7 +743,7 @@ _e_remember_cb_hook_eval_post_new_border(void *data, E_Border *bd)
             rem->match |= E_REMEMBER_MATCH_TRANSIENT;
             rem->apply = E_REMEMBER_APPLY_POS | E_REMEMBER_APPLY_SIZE | E_REMEMBER_APPLY_BORDER;
             e_remember_use(rem);
-            e_remember_update(rem, bd);
+            e_remember_update(bd);
          }
      }
 }
index 1b61134..fa8ea77 100644 (file)
@@ -108,8 +108,8 @@ EAPI void         e_remember_del(E_Remember *rem);
 EAPI E_Remember  *e_remember_find(E_Border *bd);
 EAPI E_Remember  *e_remember_find_usable(E_Border *bd);
 EAPI void         e_remember_match_update(E_Remember *rem);
-EAPI void         e_remember_update(E_Remember *rem, E_Border *bd);
-EAPI int         e_remember_default_match(E_Border *bd);
+EAPI void         e_remember_update(E_Border *bd);
+EAPI int         e_remember_default_match_set(E_Remember *rem, E_Border *bd);
     
 #endif
 #endif
index bbedb2d..37c5274 100644 (file)
@@ -151,17 +151,22 @@ _basic_apply_border(E_Config_Dialog_Data *cfdata)
      }
    if (cfdata->remember_border) 
      {
-       if (!cfdata->border->remember) 
+       E_Remember *rem = cfdata->border->remember;
+
+       if (!rem) 
          {
-             cfdata->border->remember = e_remember_new();
-             if (cfdata->border->remember)
-              e_remember_use(cfdata->border->remember);
+             rem = e_remember_new();
+             if (rem)
+              e_remember_use(rem);
          }
-       if (cfdata->border->remember
+       if (rem
          {
-            cfdata->border->remember->apply |= E_REMEMBER_APPLY_BORDER;
-             cfdata->border->remember->match = e_remember_default_match(cfdata->border);
-             e_remember_update(cfdata->border->remember, cfdata->border);
+            rem->apply |= E_REMEMBER_APPLY_BORDER;
+             e_remember_default_match_set(rem, cfdata->border);
+            if (rem->prop.border) eina_stringshare_del(rem->prop.border);
+            rem->prop.border = eina_stringshare_add(cfdata->border->bordername);
+            cfdata->border->remember = rem;
+             e_remember_update(cfdata->border);
          }
      }
    else