todo items gone. window icon is now choosable - eap or app provided one.

SVN revision: 20140
This commit is contained in:
Carsten Haitzler 2006-01-31 08:02:18 +00:00
parent 94a80f9087
commit afdc6b19ef
5 changed files with 74 additions and 34 deletions

7
TODO
View File

@ -8,6 +8,7 @@ Some of the things (in very short form) that need to be done to E17...
BUGS / FIXES
-------------------------------------------------------------------------------
* BUG: itray. need i say more (it's riddled with problems)
* BUG: dnd icon from window that has no .eap defining its ocon to ibar and the
ibar icon ends up blank (cant build .eap freom ARGB pixels)
* BUG: edge flip for desktops still active if turned off when dragging a window
@ -70,12 +71,6 @@ Some of the things (in very short form) that need to be done to E17...
adjusted size) is smaller that screen max size, fill in space in between
with black. for 3. we want to fill the inbewteen space with some theme
defined image data
* netwm window types and states need addressing (do special/appropriate things)
for each of them.
* do something with the icccm urgency field hint
* different borders for non-resizable windows, shaped windows etc.
* window icons should be able to be chosen if e eapp icon overrides netwm
icon or the other way around (and remember this).
* actions to make current zone different (warp mouse to there)
* actions to make the current container different
* titlebar/border expansion/gadget panel for modules to put window widgets in

View File

@ -2356,37 +2356,52 @@ e_border_icon_add(E_Border *bd, Evas *evas)
e_util_edje_icon_set(o, "enlightenment/e");
return o;
}
if ((bd->client.icccm.name) && (bd->client.icccm.class))
if (e_config->use_app_icon)
{
char *title = "";
if (bd->client.netwm.name) title = bd->client.netwm.name;
else title = bd->client.icccm.title;
a = e_app_window_name_class_title_role_find(bd->client.icccm.name,
bd->client.icccm.class,
title,
bd->client.icccm.window_role);
if (bd->client.netwm.icons)
{
o = e_icon_add(evas);
e_icon_data_set(o, bd->client.netwm.icons[0].data,
bd->client.netwm.icons[0].width,
bd->client.netwm.icons[0].height);
e_icon_alpha_set(o, 1);
return o;
}
}
if (!a)
if (!o)
{
a = e_app_launch_id_pid_find(bd->client.netwm.startup_id,
bd->client.netwm.pid);
}
if (a)
{
o = e_app_icon_add(evas, a);
bd->app = a;
e_object_ref(E_OBJECT(bd->app));
return o;
}
else if (bd->client.netwm.icons)
{
o = e_icon_add(evas);
e_icon_data_set(o, bd->client.netwm.icons[0].data,
bd->client.netwm.icons[0].width,
bd->client.netwm.icons[0].height);
e_icon_alpha_set(o, 1);
return o;
if ((bd->client.icccm.name) && (bd->client.icccm.class))
{
char *title = "";
if (bd->client.netwm.name) title = bd->client.netwm.name;
else title = bd->client.icccm.title;
a = e_app_window_name_class_title_role_find(bd->client.icccm.name,
bd->client.icccm.class,
title,
bd->client.icccm.window_role);
}
if (!a)
{
a = e_app_launch_id_pid_find(bd->client.netwm.startup_id,
bd->client.netwm.pid);
}
if (a)
{
o = e_app_icon_add(evas, a);
bd->app = a;
e_object_ref(E_OBJECT(bd->app));
return o;
}
else if (bd->client.netwm.icons)
{
o = e_icon_add(evas);
e_icon_data_set(o, bd->client.netwm.icons[0].data,
bd->client.netwm.icons[0].width,
bd->client.netwm.icons[0].height);
e_icon_alpha_set(o, 1);
return o;
}
}
if (!o)
{
@ -4480,6 +4495,8 @@ _e_border_cb_grab_replay(void *data, int type, void *event)
static void
_e_border_eval(E_Border *bd)
{
int change_urgent = 0;
/* fetch any info queued to be fetched */
if (bd->client.icccm.fetch.title)
{
@ -4675,6 +4692,8 @@ _e_border_eval(E_Border *bd)
&is_urgent))
{
bd->client.icccm.accepts_focus = accepts_focus;
if (bd->client.icccm.urgent != is_urgent)
change_urgent = 1;
bd->client.icccm.urgent = is_urgent;
/* If this is a new window, set the state as requested. */
@ -5137,6 +5156,8 @@ _e_border_eval(E_Border *bd)
edje_object_signal_emit(bd->bg_object, "fullscreen", "");
if (bd->hung)
edje_object_signal_emit(bd->bg_object, "hung", "");
if (bd->client.icccm.urgent)
edje_object_signal_emit(bd->bg_object, "urgent", "");
evas_object_move(bd->bg_object, 0, 0);
evas_object_resize(bd->bg_object, bd->w, bd->h);
@ -5825,6 +5846,17 @@ _e_border_eval(E_Border *bd)
}
bd->changes.icon = 0;
}
if (change_urgent)
{
if (bd->client.icccm.urgent)
edje_object_signal_emit(bd->bg_object, "urgent", "");
else
edje_object_signal_emit(bd->bg_object, "not_urgent", "");
/* FIXME: we should probably do something with the pager or
* maybe raising the window if it becomes urgent
*/
}
bd->new_client = 0;

View File

@ -401,6 +401,7 @@ e_config_init(void)
E_CONFIG_VAL(D, T, exebuf_pos_max_w, INT);
E_CONFIG_VAL(D, T, exebuf_pos_max_h, INT);
E_CONFIG_LIST(D, T, color_classes, _e_config_color_class_edd);
E_CONFIG_VAL(D, T, use_app_icon, INT);
e_config = e_config_domain_load("e", _e_config_edd);
if (e_config)
{
@ -546,6 +547,8 @@ e_config_init(void)
e_config->exebuf_pos_min_h = 160;
e_config->exebuf_pos_max_w = 400;
e_config->exebuf_pos_max_h = 320;
e_config->color_classes = NULL;
e_config->use_app_icon = 0;
{
E_Config_Module *em;
@ -1537,6 +1540,7 @@ e_config_init(void)
E_CONFIG_LIMIT(e_config->menu_eap_name_show, 0, 1);
E_CONFIG_LIMIT(e_config->menu_eap_generic_show, 0, 1);
E_CONFIG_LIMIT(e_config->menu_eap_comment_show, 0, 1);
E_CONFIG_LIMIT(e_config->use_app_icon, 0, 1);
return 1;
}

View File

@ -200,6 +200,7 @@ struct _E_Config
int exebuf_pos_max_w;
int exebuf_pos_max_h;
Evas_List *color_classes;
int use_app_icon;
};
struct _E_Config_Module

View File

@ -27,6 +27,7 @@ struct _E_Config_Dialog_Data
int border_shade_animate;
int border_shade_transition;
double border_shade_speed;
int use_app_icon;
};
/* a nice easy setup function that does the dirty work */
@ -66,6 +67,7 @@ _fill_data(E_Config_Dialog_Data *cfdata)
cfdata->resize_info_visible) cfdata->move_resize_info = 1;
if (cfdata->border_shade_animate) cfdata->animate_shading = 1;
cfdata->placement = cfdata->window_placement_policy;
cfdata->use_app_icon = e_config->use_app_icon;
}
static void *
@ -122,6 +124,7 @@ _advanced_apply_data(E_Config_Dialog *cfd, E_Config_Dialog_Data *cfdata)
e_config->border_shade_animate = cfdata->border_shade_animate;
e_config->border_shade_transition = cfdata->border_shade_transition;
e_config->border_shade_speed = cfdata->border_shade_speed;
e_config->use_app_icon = cfdata->use_app_icon;
e_config_save_queue();
return 1; /* Apply was OK */
}
@ -209,5 +212,10 @@ _advanced_create_widgets(E_Config_Dialog *cfd, Evas *evas, E_Config_Dialog_Data
e_widget_framelist_object_append(of, ob);
e_widget_list_object_append(o, of, 1, 1, 0.5);
of = e_widget_framelist_add(evas, _("Window Frame"), 0);
ob = e_widget_check_add(evas, _("Use application provided icon instead"), &(cfdata->use_app_icon));
e_widget_framelist_object_append(of, ob);
e_widget_list_object_append(o, of, 1, 1, 0.5);
return o;
}