remember the borders' .desktop file after restart

SVN revision: 42067
This commit is contained in:
Hannes Janetzek 2009-08-28 09:25:36 +00:00
parent b3c2986d55
commit 1e8112a09e
4 changed files with 33 additions and 4 deletions

View File

@ -14,6 +14,7 @@ EAPI Ecore_X_Atom E_ATOM_HIDDEN = 0;
EAPI Ecore_X_Atom E_ATOM_BORDER_SIZE = 0;
EAPI Ecore_X_Atom E_ATOM_WINDOW_STATE = 0;
EAPI Ecore_X_Atom E_ATOM_WINDOW_STATE_CENTERED = 0;
EAPI Ecore_X_Atom E_ATOM_DESKTOP_FILE = 0;
/* externally accessible functions */
EAPI int
@ -29,11 +30,12 @@ e_atoms_init(void)
"__E_WINDOW_HIDDEN",
"__E_WINDOW_BORDER_SIZE",
"__E_ATOM_WINDOW_STATE",
"__E_ATOM_WINDOW_STATE_CENTERED"
"__E_ATOM_WINDOW_STATE_CENTERED",
"__E_ATOM_DESKTOP_FILE"
};
Ecore_X_Atom atoms[10];
Ecore_X_Atom atoms[11];
ecore_x_atoms_get(atom_names, 10, atoms);
ecore_x_atoms_get(atom_names, 11, atoms);
E_ATOM_MANAGED = atoms[0];
E_ATOM_CONTAINER = atoms[1];
E_ATOM_ZONE = atoms[2];
@ -44,6 +46,7 @@ e_atoms_init(void)
E_ATOM_BORDER_SIZE = atoms[7];
E_ATOM_WINDOW_STATE = atoms[8];
E_ATOM_WINDOW_STATE_CENTERED = atoms[9];
E_ATOM_DESKTOP_FILE = atoms[10];
return 1;
}

View File

@ -17,6 +17,7 @@ extern EAPI Ecore_X_Atom E_ATOM_MAPPED;
extern EAPI Ecore_X_Atom E_ATOM_SHADE_DIRECTION;
extern EAPI Ecore_X_Atom E_ATOM_HIDDEN;
extern EAPI Ecore_X_Atom E_ATOM_BORDER_SIZE;
extern EAPI Ecore_X_Atom E_ATOM_DESKTOP_FILE;
/* extra e window states */
/* if we add more states, we need to fix

View File

@ -7368,7 +7368,8 @@ _e_border_eval(E_Border *bd)
if ((bd->client.icccm.name) && (bd->client.icccm.class))
bd->desktop = efreet_util_desktop_wm_class_find(bd->client.icccm.name,
bd->client.icccm.class);
if (bd->desktop) efreet_desktop_ref(bd->desktop);
/* already refd by desktop_wm_class_find */
/* if (bd->desktop) efreet_desktop_ref(bd->desktop); */
}
if (!bd->desktop)
{
@ -7376,6 +7377,19 @@ _e_border_eval(E_Border *bd)
bd->client.netwm.pid);
if (bd->desktop) efreet_desktop_ref(bd->desktop);
}
if (!bd->desktop && bd->client.icccm.name)
{
/* this works for most cases as fallback. useful when app is
run from a shell */
bd->desktop = efreet_util_desktop_exec_find(bd->client.icccm.name);
}
if (bd->desktop)
{
ecore_x_window_prop_string_set(bd->client.win, E_ATOM_DESKTOP_FILE,
bd->desktop->orig_path);
}
bd->icon_object = e_border_icon_add(bd, bd->bg_evas);
if ((bd->focused) && (bd->icon_object))
edje_object_signal_emit(bd->icon_object, "e,state,focused", "e");

View File

@ -256,6 +256,8 @@ e_manager_manage_windows(E_Manager *man)
E_Desk *desk = NULL;
E_Border *bd = NULL;
unsigned int id;
char *path;
Efreet_Desktop *desktop = NULL;
/* get all information from window before it is
* reset by e_border_new */
@ -282,6 +284,14 @@ e_manager_manage_windows(E_Manager *man)
deskxy[0],
deskxy[1]);
path = ecore_x_window_prop_string_get(windows[i],
E_ATOM_DESKTOP_FILE);
if (path)
{
desktop = efreet_desktop_get(path);
free(path);
}
{
bd = e_border_new(con, windows[i], 1, 0);
if (bd)
@ -292,6 +302,7 @@ e_manager_manage_windows(E_Manager *man)
* be set according to the desk */
// if (zone) e_border_zone_set(bd, zone);
if (desk) e_border_desk_set(bd, desk);
bd->desktop = desktop;
}
}
}