fix several bugs (cursors for example)... found some more... :)

SVN revision: 19555
This commit is contained in:
Carsten Haitzler 2006-01-06 13:56:46 +00:00
parent 1625201009
commit eff5eeeac7
21 changed files with 4011 additions and 540 deletions

10
TODO
View File

@ -8,9 +8,12 @@ Some of the things (in very short form) that need to be done to E17...
BUGS / FIXES
-------------------------------------------------------------------------------
* BUG: mouse pointer changes are buggy - white box for x curosrs the first
time that cursor is used. also sometimes forgets what cursor to use and
was being used etc.
* BUG: fullscreen does not respect min/max window size
* BUG: changing border from shaped to not shaped produces shadow bugs
* BUG: xdaliclock -transparent doesnt use shaped border (not handling shape
change later)
* BUG: if a user selects a border the border should not just shange based on
properties. if user selects a border in border selector, then lock border
* BUG: if you iconify a window and while iconified the window unmaps
(rhythmbox does this a lot apparently) e doesnt realise and still thinks
its iconified.
@ -33,7 +36,6 @@ Some of the things (in very short form) that need to be done to E17...
ESSENTIAL FEATURES
-------------------------------------------------------------------------------
* add fullscreen (zoom) support (e16 xvidmode or xrandr style)
* implement thees maximise/fullscreen modes:
Which of these should be different modes, and which should be options for
a mode? i think they all should be distinct actions of their own bound

File diff suppressed because it is too large Load Diff

View File

@ -413,4 +413,8 @@ e17_ilist_bg1.png \
e17_slider_bt0.png \
e17_slider_bt1.png \
e17_slider_bt_glow.png \
e17_entry_cursor.png
e17_entry_cursor.png \
e17_border1b.png \
e17_border3b.png \
e17_border5b.png \
e17_border7b.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 367 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 212 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 185 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 200 B

894
po/sk.po

File diff suppressed because it is too large Load Diff

View File

@ -37,6 +37,7 @@ e_about_new(E_Container *con)
}
e_win_delete_callback_set(about->win, _e_about_cb_delete);
about->win->data = about;
e_win_dialog_set(about->win, 1);
e_win_name_class_set(about->win, "E", "_about");
e_win_title_set(about->win, _("About Enlightenment"));

View File

@ -4759,42 +4759,6 @@ _e_border_eval(E_Border *bd)
}
bd->client.icccm.fetch.protocol = 0;
}
if (bd->client.mwm.fetch.hints)
{
int pb;
bd->client.mwm.exists =
ecore_x_mwm_hints_get(bd->client.win,
&bd->client.mwm.func,
&bd->client.mwm.decor,
&bd->client.mwm.input);
pb = bd->client.mwm.borderless;
bd->client.mwm.borderless = 0;
if (bd->client.mwm.exists)
{
// printf("##- MWM HINTS SET 0x%x!\n", bd->client.win);
if ((!(bd->client.mwm.decor & ECORE_X_MWM_HINT_DECOR_ALL)) &&
(!(bd->client.mwm.decor & ECORE_X_MWM_HINT_DECOR_TITLE)) &&
(!(bd->client.mwm.decor & ECORE_X_MWM_HINT_DECOR_BORDER)))
bd->client.mwm.borderless = 1;
}
if (bd->client.mwm.borderless != pb)
{
if (((!bd->lock_border) || (!bd->client.border.name))
&& (!bd->shaded))
{
if (bd->client.border.name) evas_stringshare_del(bd->client.border.name);
if (bd->client.mwm.borderless)
bd->client.border.name = evas_stringshare_add("borderless");
else
bd->client.border.name = evas_stringshare_add("default");
// if (bd->client.mwm.borderless)
// printf("client %s borderless\n", bd->client.icccm.title);
bd->client.border.changed = 1;
}
}
bd->client.mwm.fetch.hints = 0;
}
if (bd->client.icccm.fetch.transient_for)
{
bd->client.icccm.transient_for = ecore_x_icccm_transient_for_get(bd->client.win);
@ -4810,12 +4774,6 @@ _e_border_eval(E_Border *bd)
bd->client.icccm.window_role = ecore_x_icccm_window_role_get(bd->client.win);
bd->client.icccm.fetch.window_role = 0;
}
if (bd->client.netwm.update.state)
{
e_hints_window_state_set(bd);
bd->client.netwm.update.state = 0;
}
if (bd->changes.shape)
{
Ecore_X_Rectangle *rects;
@ -4858,6 +4816,46 @@ _e_border_eval(E_Border *bd)
bd->client.shaped = 0;
bd->need_shape_merge = 1;
}
if (bd->client.mwm.fetch.hints)
{
int pb;
bd->client.mwm.exists =
ecore_x_mwm_hints_get(bd->client.win,
&bd->client.mwm.func,
&bd->client.mwm.decor,
&bd->client.mwm.input);
pb = bd->client.mwm.borderless;
bd->client.mwm.borderless = 0;
if (bd->client.mwm.exists)
{
// printf("##- MWM HINTS SET 0x%x!\n", bd->client.win);
if ((!(bd->client.mwm.decor & ECORE_X_MWM_HINT_DECOR_ALL)) &&
(!(bd->client.mwm.decor & ECORE_X_MWM_HINT_DECOR_TITLE)) &&
(!(bd->client.mwm.decor & ECORE_X_MWM_HINT_DECOR_BORDER)))
bd->client.mwm.borderless = 1;
}
if (bd->client.mwm.borderless != pb)
{
if (((!bd->lock_border) || (!bd->client.border.name))
&& (!bd->shaded))
{
if (bd->client.border.name)
evas_stringshare_del(bd->client.border.name);
if (bd->client.mwm.borderless)
bd->client.border.name = evas_stringshare_add("borderless");
else
bd->client.border.name = evas_stringshare_add("default");
bd->client.border.changed = 1;
}
}
bd->client.mwm.fetch.hints = 0;
}
if (bd->client.netwm.update.state)
{
e_hints_window_state_set(bd);
bd->client.netwm.update.state = 0;
}
if (bd->new_client)
{
@ -4870,6 +4868,40 @@ _e_border_eval(E_Border *bd)
// e_object_breadcrumb_add(E_OBJECT(bd), "border_add_event");
ecore_event_add(E_EVENT_BORDER_ADD, ev, _e_border_event_border_add_free, NULL);
if (((!bd->lock_border) || (!bd->client.border.name))
&& (!bd->shaded))
{
if (bd->client.border.name)
evas_stringshare_del(bd->client.border.name);
if (bd->client.mwm.borderless)
bd->client.border.name = evas_stringshare_add("borderless");
else if (((bd->client.icccm.transient_for != 0) ||
(bd->client.netwm.type == ECORE_X_WINDOW_TYPE_DIALOG)) &&
(bd->client.icccm.min_w == bd->client.icccm.max_w) &&
(bd->client.icccm.min_h == bd->client.icccm.max_h))
bd->client.border.name = evas_stringshare_add("noresize_dialog");
else if ((bd->client.icccm.min_w == bd->client.icccm.max_w) &&
(bd->client.icccm.min_h == bd->client.icccm.max_h))
bd->client.border.name = evas_stringshare_add("noresize");
else if (bd->client.shaped)
bd->client.border.name = evas_stringshare_add("shaped");
else if ((!bd->client.icccm.accepts_focus) &&
(!bd->client.icccm.take_focus))
bd->client.border.name = evas_stringshare_add("nofocus");
else if (bd->client.icccm.urgent)
bd->client.border.name = evas_stringshare_add("urgent");
else if ((bd->client.icccm.transient_for != 0) ||
(bd->client.netwm.type == ECORE_X_WINDOW_TYPE_DIALOG))
bd->client.border.name = evas_stringshare_add("dialog");
else if (bd->client.netwm.state.modal)
bd->client.border.name = evas_stringshare_add("modal");
else if ((bd->client.netwm.state.skip_taskbar) ||
(bd->client.netwm.state.skip_pager))
bd->client.border.name = evas_stringshare_add("skipped");
else
bd->client.border.name = evas_stringshare_add("default");
bd->client.border.changed = 1;
}
if (!bd->remember)
{
rem = e_remember_find(bd);
@ -5704,7 +5736,8 @@ _e_border_eval(E_Border *bd)
if ((!bd->placed) && (!bd->re_manage) &&
(e_config->window_placement_policy == E_WINDOW_PLACEMENT_MANUAL) &&
(bd->client.netwm.type != ECORE_X_WINDOW_TYPE_DIALOG) &&
(!((bd->client.icccm.transient_for != 0) ||
(bd->client.netwm.type == ECORE_X_WINDOW_TYPE_DIALOG))) &&
(!move) && (!resize))
{
/* Set this window into moving state */

View File

@ -203,18 +203,18 @@ struct _E_Border
int num_icons;
unsigned int user_time;
struct {
int left;
int right;
int top;
int bottom;
int left_start_y;
int left_end_y;
int right_start_y;
int right_end_y;
int top_start_x;
int top_end_x;
int bottom_start_x;
int bottom_end_x;
int left;
int right;
int top;
int bottom;
int left_start_y;
int left_end_y;
int right_start_y;
int right_end_y;
int top_start_x;
int top_end_x;
int bottom_start_x;
int bottom_end_x;
} strut;
unsigned char ping : 1;
struct {
@ -260,7 +260,7 @@ struct _E_Border
} fetch;
struct {
unsigned char state : 1;
unsigned char state : 1;
} update;
} netwm;

View File

@ -44,6 +44,7 @@ e_configure_show(E_Container *con)
e_win_title_set(eco->win, _("Enlightenment Configuration"));
e_win_name_class_set(eco->win, "E", "_configure");
e_win_dialog_set(eco->win, 1);
eco->evas = e_win_evas_get(eco->win);
e_win_delete_callback_set(eco->win, _e_configure_cb_del_req);
e_win_resize_callback_set(eco->win, _e_configure_cb_resize);

View File

@ -39,10 +39,10 @@ e_dialog_new(E_Container *con)
free(dia);
return NULL;
}
ecore_x_netwm_window_type_set(dia->win->evas_win, ECORE_X_WINDOW_TYPE_DIALOG);
e_win_delete_callback_set(dia->win, _e_dialog_cb_delete);
e_win_resize_callback_set(dia->win, _e_dialog_cb_resize);
dia->win->data = dia;
e_win_dialog_set(dia->win, 1);
e_win_name_class_set(dia->win, "E", "_dialog");
o = edje_object_add(e_win_evas_get(dia->win));
dia->bg_object = o;

View File

@ -168,13 +168,18 @@ e_int_border_menu_show(E_Border *bd, Evas_Coord x, Evas_Coord y, int key, Ecore_
"widgets/border/default/stacking"),
"widgets/border/default/stacking");
mi = e_menu_item_new(m);
e_menu_item_label_set(mi, _("Maximize"));
e_menu_item_submenu_set(mi, bd->border_maximize_menu);
e_menu_item_icon_edje_set(mi,
(char *)e_theme_edje_file_get("base/theme/borders",
"widgets/border/default/maximize"),
"widgets/border/default/maximize");
if (!(((bd->client.icccm.min_w == bd->client.icccm.max_w) &&
(bd->client.icccm.min_h == bd->client.icccm.max_h)) ||
(bd->lock_user_maximize)))
{
mi = e_menu_item_new(m);
e_menu_item_label_set(mi, _("Maximize"));
e_menu_item_submenu_set(mi, bd->border_maximize_menu);
e_menu_item_icon_edje_set(mi,
(char *)e_theme_edje_file_get("base/theme/borders",
"widgets/border/default/maximize"),
"widgets/border/default/maximize");
}
if ((!bd->lock_user_shade) && (!(!strcmp("borderless", bd->client.border.name))))
{

View File

@ -42,10 +42,6 @@ static void _e_int_menus_clients_item_cb (void *data, E_Menu *m, E_Menu_Item
static void _e_int_menus_clients_cleanup_cb (void *data, E_Menu *m, E_Menu_Item *mi);
static void _e_int_menus_desktops_pre_cb (void *data, E_Menu *m);
static void _e_int_menus_desktops_item_cb (void *data, E_Menu *m, E_Menu_Item *mi);
static void _e_int_menus_desktops_row_add_cb (void *data, E_Menu *m, E_Menu_Item *mi);
static void _e_int_menus_desktops_row_del_cb (void *data, E_Menu *m, E_Menu_Item *mi);
static void _e_int_menus_desktops_col_add_cb (void *data, E_Menu *m, E_Menu_Item *mi);
static void _e_int_menus_desktops_col_del_cb (void *data, E_Menu *m, E_Menu_Item *mi);
static void _e_int_menus_gadgets_pre_cb (void *data, E_Menu *m);
static void _e_int_menus_gadgets_edit_mode_cb(void *data, E_Menu *m, E_Menu_Item *mi);
static void _e_int_menus_themes_pre_cb (void *data, E_Menu *m);
@ -523,8 +519,6 @@ _e_int_menus_desktops_pre_cb(void *data, E_Menu *m)
e_menu_pre_activate_callback_set(m, NULL, NULL);
root = e_menu_root_get(m);
/* Get the desktop list for this zone */
/* FIXME: Menu code needs to determine what zone menu was clicked in */
if ((root) && (root->zone))
{
int i;
@ -544,66 +538,6 @@ _e_int_menus_desktops_pre_cb(void *data, E_Menu *m)
e_menu_item_callback_set(mi, _e_int_menus_desktops_item_cb, desk);
}
}
mi = e_menu_item_new(m);
e_menu_item_separator_set(mi, 1);
mi = e_menu_item_new(m);
e_menu_item_label_set(mi, _("New Row of Desktops"));
e_menu_item_callback_set(mi, _e_int_menus_desktops_row_add_cb, NULL);
mi = e_menu_item_new(m);
e_menu_item_label_set(mi, _("Remove Row of Desktops"));
e_menu_item_callback_set(mi, _e_int_menus_desktops_row_del_cb, NULL);
mi = e_menu_item_new(m);
e_menu_item_label_set(mi, _("New Column of Desktops"));
e_menu_item_callback_set(mi, _e_int_menus_desktops_col_add_cb, NULL);
mi = e_menu_item_new(m);
e_menu_item_label_set(mi, _("Remove Column of Desktops"));
e_menu_item_callback_set(mi, _e_int_menus_desktops_col_del_cb, NULL);
}
/* FIXME: Use the zone the menu was clicked in */
static void
_e_int_menus_desktops_row_add_cb(void *data, E_Menu *m, E_Menu_Item *mi)
{
E_Menu *root;
root = e_menu_root_get(m);
if (root)
e_desk_row_add(root->zone);
}
static void
_e_int_menus_desktops_row_del_cb(void *data, E_Menu *m, E_Menu_Item *mi)
{
E_Menu *root;
root = e_menu_root_get(m);
if (root)
e_desk_row_remove(root->zone);
}
static void
_e_int_menus_desktops_col_add_cb(void *data, E_Menu *m, E_Menu_Item *mi)
{
E_Menu *root;
root = e_menu_root_get(m);
if (root)
e_desk_col_add(root->zone);
}
static void
_e_int_menus_desktops_col_del_cb(void *data, E_Menu *m, E_Menu_Item *mi)
{
E_Menu *root;
root = e_menu_root_get(m);
if (root)
e_desk_col_remove(root->zone);
}
static void

View File

@ -8,6 +8,7 @@ static void _e_manager_free(E_Manager *man);
static int _e_manager_cb_window_show_request(void *data, int ev_type, void *ev);
static int _e_manager_cb_window_configure(void *data, int ev_type, void *ev);
static int _e_manager_cb_key_up(void *data, int ev_type, void *ev);
static int _e_manager_cb_key_down(void *data, int ev_type, void *ev);
static int _e_manager_cb_frame_extents_request(void *data, int ev_type, void *ev);
static int _e_manager_cb_ping(void *data, int ev_type, void *ev);
@ -115,6 +116,8 @@ e_manager_new(Ecore_X_Window root, int num)
if (h) man->handlers = evas_list_append(man->handlers, h);
h = ecore_event_handler_add(ECORE_X_EVENT_KEY_DOWN, _e_manager_cb_key_down, man);
if (h) man->handlers = evas_list_append(man->handlers, h);
h = ecore_event_handler_add(ECORE_X_EVENT_KEY_UP, _e_manager_cb_key_up, man);
if (h) man->handlers = evas_list_append(man->handlers, h);
h = ecore_event_handler_add(ECORE_X_EVENT_FRAME_EXTENTS_REQUEST, _e_manager_cb_frame_extents_request, man);
h = ecore_event_handler_add(ECORE_X_EVENT_PING, _e_manager_cb_ping, man);
if (h) man->handlers = evas_list_append(man->handlers, h);
@ -502,13 +505,25 @@ _e_manager_cb_key_down(void *data, int ev_type __UNUSED__, void *ev)
man = data;
e = ev;
// printf("KEY %s [win=%x event_win=%x]\n", e->keyname, e->win, e->event_win);
// printf("KD %s [win=%x event_win=%x]\n", e->keyname, e->win, e->event_win);
if (e->event_win != man->root) return 1;
if (e_bindings_key_down_event_handle(E_BINDING_CONTEXT_MANAGER, E_OBJECT(man), ev))
return 0;
return 1;
}
static int
_e_manager_cb_key_up(void *data, int ev_type __UNUSED__, void *ev)
{
E_Manager *man;
Ecore_X_Event_Key_Up *e;
man = data;
e = ev;
// printf("KU %s [win=%x event_win=%x]\n", e->keyname, e->win, e->event_win);
return 1;
}
static int
_e_manager_cb_frame_extents_request(void *data, int ev_type __UNUSED__, void *ev)
{

View File

@ -103,19 +103,16 @@ e_pointer_window_new(Ecore_X_Window win)
/* Init the cursor object */
if (ecore_x_cursor_color_supported_get())
{
p->color = 1;
}
p->color = 1;
else
{
p->color = 0;
}
p->color = 0;
/* init edje */
evas_object_move(p->pointer_object, 0, 0);
evas_object_resize(p->pointer_object, p->w, p->h);
evas_object_show(p->pointer_object);
ecore_x_cursor_size_set(e_config->cursor_size * 3 / 4);
e_pointer_type_push(p, p, "default");
_e_pointers = evas_list_append(_e_pointers, p);
@ -183,14 +180,12 @@ e_pointer_type_push(E_Pointer *p, void *obj, const char *type)
{
E_Pointer_Stack *stack;
p->e_cursor = e_config->use_e_cursor;
if (!_e_pointer_type_set(p, type))
{
p->e_cursor = !p->e_cursor;
p->e_cursor = 0;
if (!_e_pointer_type_set(p, type))
{
printf("BUG: Can't set cursor!\n");
return;
}
return;
}
if (p->type) evas_stringshare_del(p->type);
@ -205,9 +200,6 @@ e_pointer_type_push(E_Pointer *p, void *obj, const char *type)
stack->e_cursor = p->e_cursor;
p->stack = evas_list_prepend(p->stack, stack);
}
/* try the default cursor next time */
p->e_cursor = e_config->use_e_cursor;
}
void
@ -345,35 +337,28 @@ _e_pointer_type_set(E_Pointer *p, const char *type)
if (p->e_cursor)
{
Evas_Object *o;
char cursor[1024];
char cursor[1024];
o = p->pointer_object;
if (p->color)
{
snprintf(cursor, sizeof(cursor), "pointer/enlightenment/%s/color", type);
if (!e_theme_edje_object_set(o,
"base/theme/pointer",
cursor))
{
return 0;
}
if (!e_theme_edje_object_set(o, "base/theme/pointer", cursor))
return 0;
}
else
{
snprintf(cursor, sizeof(cursor), "pointer/enlightenment/%s/mono", type);
if (!e_theme_edje_object_set(o,
"base/theme/pointer",
cursor))
{
return 0;
}
if (!e_theme_edje_object_set(o, "base/theme/pointer", cursor))
return 0;
}
edje_object_part_swallow(p->pointer_object, "hotspot", p->hot_object);
p->hot.update = 1;
}
else
{
Ecore_X_Cursor cursor;
Ecore_X_Cursor cursor = 0;
if (!strcmp(type, "move"))
{
cursor = ecore_x_cursor_shape_get(ECORE_X_CURSOR_FLEUR);
@ -449,6 +434,7 @@ _e_pointer_type_set(E_Pointer *p, const char *type)
if (!cursor) printf("X Cursor for default is missing\n");
ecore_x_window_cursor_set(p->win, cursor);
}
if (cursor) ecore_x_cursor_free(cursor);
}
return 1;
}

View File

@ -37,6 +37,7 @@ e_theme_about_new(E_Container *con)
}
e_win_delete_callback_set(about->win, _e_theme_about_cb_delete);
about->win->data = about;
e_win_dialog_set(about->win, 1);
e_win_name_class_set(about->win, "E", "_theme_about");
e_win_title_set(about->win, _("About This Theme"));

View File

@ -104,6 +104,7 @@ e_win_show(E_Win *win)
ecore_evas_software_x11_extra_event_window_add(win->ecore_evas, win->border->event_win);
}
}
_e_win_prop_update(win);
e_border_show(win->border);
ecore_evas_show(win->ecore_evas);
}
@ -341,6 +342,23 @@ e_win_centered_set(E_Win *win, int centered)
}
}
void
e_win_dialog_set(E_Win *win, int dialog)
{
E_OBJECT_CHECK(win);
E_OBJECT_TYPE_CHECK(win, E_WIN_TYPE);
if ((win->state.dialog) && (!dialog))
{
win->state.dialog = 0;
_e_win_prop_update(win);
}
else if ((!win->state.dialog) && (dialog))
{
win->state.dialog = 1;
_e_win_prop_update(win);
}
}
/* local subsystem functions */
static void
_e_win_free(E_Win *win)
@ -375,6 +393,16 @@ _e_win_prop_update(E_Win *win)
win->base_w, win->base_h,
win->step_x, win->step_y,
win->min_aspect, win->max_aspect);
if (win->state.dialog)
{
ecore_x_icccm_transient_for_set(win->evas_win, win->container->manager->root);
ecore_x_netwm_window_type_set(win->evas_win, ECORE_X_WINDOW_TYPE_DIALOG);
}
else
{
ecore_x_icccm_transient_for_unset(win->evas_win);
ecore_x_netwm_window_type_set(win->evas_win, ECORE_X_WINDOW_TYPE_NORMAL);
}
}
static void
@ -387,13 +415,9 @@ _e_win_state_update(E_Win *win)
state[num++] = E_ATOM_WINDOW_STATE_CENTERED;
if (num)
{
ecore_x_window_prop_card32_set(win->evas_win, E_ATOM_WINDOW_STATE, state, num);
}
ecore_x_window_prop_card32_set(win->evas_win, E_ATOM_WINDOW_STATE, state, num);
else
{
ecore_x_window_prop_property_del(win->evas_win, E_ATOM_WINDOW_STATE);
}
ecore_x_window_prop_property_del(win->evas_win, E_ATOM_WINDOW_STATE);
}
static void

View File

@ -33,7 +33,8 @@ struct _E_Win
void *data;
struct {
unsigned char centered : 1;
unsigned char centered : 1;
unsigned char dialog : 1;
} state;
};
@ -65,6 +66,7 @@ EAPI void e_win_name_class_set (E_Win *win, char *name, char *class);
EAPI void e_win_title_set (E_Win *win, char *title);
EAPI void e_win_centered_set (E_Win *win, int centered);
EAPI void e_win_dialog_set (E_Win *win, int dialog);
#endif
#endif

View File

@ -1558,8 +1558,8 @@ _pager_cb_event_desk_show(void *data, int type, void *event)
e_popup_edje_bg_object_set(pp->popup, pp->bg_object);
e_popup_ignore_events_set(pp->popup, 1);
e_popup_move_resize(pp->popup,
pp->popup->zone->x + ((pp->popup->zone->w - w) / 2),
pp->popup->zone->y + ((pp->popup->zone->h - h) / 2),
((pp->popup->zone->w - w) / 2),
((pp->popup->zone->h - h) / 2),
w, h);
e_bindings_mouse_grab(E_BINDING_CONTEXT_POPUP, pp->popup->evas_win);
e_bindings_wheel_grab(E_BINDING_CONTEXT_POPUP, pp->popup->evas_win);