diff --git a/src/bin/e_border.c b/src/bin/e_border.c index 6402feb52..6f7f10c96 100644 --- a/src/bin/e_border.c +++ b/src/bin/e_border.c @@ -5204,7 +5204,6 @@ _e_border_eval(E_Border *bd) if (bd->client.netwm.type == ECORE_X_WINDOW_TYPE_DOCK) { - /* TODO: Make this user options */ if (!bd->client.netwm.state.skip_pager) { bd->client.netwm.state.skip_pager = 1; @@ -5837,6 +5836,10 @@ _e_border_eval(E_Border *bd) } if (rem->apply & E_REMEMBER_APPLY_SKIP_WINLIST) bd->user_skip_winlist = rem->prop.skip_winlist; + if (rem->apply & E_REMEMBER_APPLY_SKIP_PAGER) + bd->client.netwm.state.skip_pager = rem->prop.skip_pager; + if (rem->apply & E_REMEMBER_APPLY_SKIP_TASKBAR) + bd->client.netwm.state.skip_taskbar = rem->prop.skip_taskbar; if (rem->apply & E_REMEMBER_APPLY_ICON_PREF) bd->icon_preference = rem->prop.icon_preference; if (rem->apply & E_REMEMBER_SET_FOCUS_ON_START) diff --git a/src/bin/e_int_border_menu.c b/src/bin/e_int_border_menu.c index c87347a30..422a143d5 100644 --- a/src/bin/e_int_border_menu.c +++ b/src/bin/e_int_border_menu.c @@ -24,6 +24,7 @@ static void _e_border_menu_cb_below(void *data, E_Menu *m, E_Menu_Item *mi); static void _e_border_menu_cb_fullscreen(void *data, E_Menu *m, E_Menu_Item *mi); static void _e_border_menu_cb_skip_winlist(void *data, E_Menu *m, E_Menu_Item *mi); static void _e_border_menu_cb_skip_pager(void *data, E_Menu *m, E_Menu_Item *mi); +static void _e_border_menu_cb_skip_taskbar(void *data, E_Menu *m, E_Menu_Item *mi); static void _e_border_menu_cb_sendto_pre(void *data, E_Menu *m, E_Menu_Item *mi); static void _e_border_menu_cb_sendto(void *data, E_Menu *m, E_Menu_Item *mi); static void _e_border_menu_cb_pin(void *data, E_Menu *m, E_Menu_Item *mi); @@ -660,6 +661,7 @@ _e_border_menu_cb_skip_winlist(void *data, E_Menu *m, E_Menu_Item *mi) bd->user_skip_winlist = e_menu_item_toggle_get(mi); else bd->user_skip_winlist = 0; + bd->changed = 1; if (bd->remember) e_remember_update(bd->remember, bd); } @@ -679,6 +681,22 @@ _e_border_menu_cb_skip_pager(void *data, E_Menu *m, E_Menu_Item *mi) if (bd->remember) e_remember_update(bd->remember, bd); } +static void +_e_border_menu_cb_skip_taskbar(void *data, E_Menu *m, E_Menu_Item *mi) +{ + E_Border *bd; + + bd = data; + if (!bd) return; + + if ((bd->client.icccm.accepts_focus) || (bd->client.icccm.take_focus)) + bd->client.netwm.state.skip_taskbar = e_menu_item_toggle_get(mi); + else + bd->client.netwm.state.skip_taskbar = 0; + bd->changed = 1; + if (bd->remember) e_remember_update(bd->remember, bd); +} + static void _e_border_menu_cb_sendto_pre(void *data, E_Menu *m, E_Menu_Item *mi) { @@ -985,6 +1003,16 @@ _e_border_menu_cb_skip(void *data, E_Menu *m, E_Menu_Item *mi) e_theme_edje_file_get("base/theme/borders", "e/widgets/border/default/skip_pager"), "e/widgets/border/default/skip_pager"); + + submi = e_menu_item_new(subm); + e_menu_item_label_set(submi, _("Taskbar")); + e_menu_item_check_set(submi, 1); + e_menu_item_toggle_set(submi, bd->client.netwm.state.skip_taskbar); + e_menu_item_callback_set(submi, _e_border_menu_cb_skip_taskbar, bd); + e_menu_item_icon_edje_set(submi, + e_theme_edje_file_get("base/theme/borders", + "e/widgets/border/default/skip_taskbar"), + "e/widgets/border/default/skip_taskbar"); } static void diff --git a/src/bin/e_int_border_remember.c b/src/bin/e_int_border_remember.c index 903a80bfa..6ed49f715 100644 --- a/src/bin/e_int_border_remember.c +++ b/src/bin/e_int_border_remember.c @@ -42,6 +42,8 @@ struct _E_Config_Dialog_Data int apply_shade; int apply_zone; int apply_skip_winlist; + int apply_skip_pager; + int apply_skip_taskbar; int apply_run; int apply_icon_pref; int set_focus_on_start; @@ -99,6 +101,8 @@ _fill_data(E_Config_Dialog_Data *cfdata) if (cfdata->border->remember->apply & E_REMEMBER_APPLY_SHADE) cfdata->remember.apply_shade = 1; if (cfdata->border->remember->apply & E_REMEMBER_APPLY_ZONE) cfdata->remember.apply_zone = 1; if (cfdata->border->remember->apply & E_REMEMBER_APPLY_SKIP_WINLIST) cfdata->remember.apply_skip_winlist = 1; + if (cfdata->border->remember->apply & E_REMEMBER_APPLY_SKIP_PAGER) cfdata->remember.apply_skip_pager = 1; + if (cfdata->border->remember->apply & E_REMEMBER_APPLY_SKIP_TASKBAR) cfdata->remember.apply_skip_taskbar = 1; if (cfdata->border->remember->apply & E_REMEMBER_APPLY_RUN) cfdata->remember.apply_run = 1; if (cfdata->border->remember->apply & E_REMEMBER_APPLY_ICON_PREF) cfdata->remember.apply_icon_pref = 1; if (cfdata->border->remember->apply & E_REMEMBER_SET_FOCUS_ON_START) cfdata->remember.set_focus_on_start = 1; @@ -110,6 +114,7 @@ _fill_data(E_Config_Dialog_Data *cfdata) (cfdata->remember.apply_border) && (cfdata->remember.apply_sticky) && (cfdata->remember.apply_desktop) && (cfdata->remember.apply_shade) && (cfdata->remember.apply_zone) && (cfdata->remember.apply_skip_winlist) && + (cfdata->remember.apply_skip_pager) && (cfdata->remember.apply_skip_taskbar) && (cfdata->remember.set_focus_on_start)) cfdata->mode = MODE_ALL; else if ((cfdata->remember.apply_pos) && (cfdata->remember.apply_size) && @@ -276,7 +281,10 @@ _basic_apply_data(E_Config_Dialog *cfd, E_Config_Dialog_Data *cfdata) else if (cfdata->mode == MODE_GEOMETRY_LOCKS) cfdata->border->remember->apply = E_REMEMBER_APPLY_POS | E_REMEMBER_APPLY_SIZE | E_REMEMBER_APPLY_LOCKS; else if (cfdata->mode == MODE_ALL) - cfdata->border->remember->apply = E_REMEMBER_APPLY_POS | E_REMEMBER_APPLY_SIZE | E_REMEMBER_APPLY_LAYER | E_REMEMBER_APPLY_LOCKS | E_REMEMBER_APPLY_BORDER | E_REMEMBER_APPLY_STICKY | E_REMEMBER_APPLY_DESKTOP | E_REMEMBER_APPLY_SHADE | E_REMEMBER_APPLY_ZONE | E_REMEMBER_APPLY_SKIP_WINLIST; + cfdata->border->remember->apply = E_REMEMBER_APPLY_POS | E_REMEMBER_APPLY_SIZE | E_REMEMBER_APPLY_LAYER | + E_REMEMBER_APPLY_LOCKS | E_REMEMBER_APPLY_BORDER | E_REMEMBER_APPLY_STICKY | + E_REMEMBER_APPLY_DESKTOP | E_REMEMBER_APPLY_SHADE | E_REMEMBER_APPLY_ZONE | + E_REMEMBER_APPLY_SKIP_WINLIST | E_REMEMBER_APPLY_SKIP_PAGER | E_REMEMBER_APPLY_SKIP_TASKBAR; cfdata->border->remember->apply_first_only = 0; e_remember_update(cfdata->border->remember, cfdata->border); } @@ -295,6 +303,7 @@ _advanced_apply_data(E_Config_Dialog *cfd, E_Config_Dialog_Data *cfdata) (cfdata->remember.apply_border) || (cfdata->remember.apply_sticky) || (cfdata->remember.apply_desktop) || (cfdata->remember.apply_shade) || (cfdata->remember.apply_zone) || (cfdata->remember.apply_skip_winlist) || + (cfdata->remember.apply_skip_pager) || (cfdata->remember.apply_skip_taskbar) || (cfdata->remember.apply_run) || (cfdata->remember.apply_icon_pref) || (cfdata->remember.set_focus_on_start))) { @@ -403,6 +412,8 @@ _advanced_apply_data(E_Config_Dialog *cfd, E_Config_Dialog_Data *cfdata) if (cfdata->remember.apply_shade) cfdata->border->remember->apply |= E_REMEMBER_APPLY_SHADE; if (cfdata->remember.apply_zone) cfdata->border->remember->apply |= E_REMEMBER_APPLY_ZONE; if (cfdata->remember.apply_skip_winlist) cfdata->border->remember->apply |= E_REMEMBER_APPLY_SKIP_WINLIST; + if (cfdata->remember.apply_skip_pager) cfdata->border->remember->apply |= E_REMEMBER_APPLY_SKIP_PAGER; + if (cfdata->remember.apply_skip_taskbar) cfdata->border->remember->apply |= E_REMEMBER_APPLY_SKIP_TASKBAR; if (cfdata->remember.apply_run) cfdata->border->remember->apply |= E_REMEMBER_APPLY_RUN; if (cfdata->remember.apply_icon_pref) cfdata->border->remember->apply |= E_REMEMBER_APPLY_ICON_PREF; if (cfdata->remember.set_focus_on_start) cfdata->border->remember->apply |= E_REMEMBER_SET_FOCUS_ON_START; @@ -506,15 +517,19 @@ _advanced_create_widgets(E_Config_Dialog *cfd, Evas *evas, E_Config_Dialog_Data ob = e_widget_check_add(evas, _("Icon Preference"), &(cfdata->remember.apply_icon_pref)); e_widget_frametable_object_append(of, ob, 0, 5, 1, 1, 1, 1, 1, 1); ob = e_widget_check_add(evas, _("Stickiness"), &(cfdata->remember.apply_sticky)); - e_widget_frametable_object_append(of, ob, 1, 0, 1, 1, 1, 1, 1, 1); + e_widget_frametable_object_append(of, ob, 0, 6, 1, 1, 1, 1, 1, 1); ob = e_widget_check_add(evas, _("Virtual Desktop"), &(cfdata->remember.apply_desktop)); - e_widget_frametable_object_append(of, ob, 1, 1, 1, 1, 1, 1, 1, 1); + e_widget_frametable_object_append(of, ob, 1, 0, 1, 1, 1, 1, 1, 1); ob = e_widget_check_add(evas, _("Shaded state"), &(cfdata->remember.apply_shade)); - e_widget_frametable_object_append(of, ob, 1, 2, 1, 1, 1, 1, 1, 1); + e_widget_frametable_object_append(of, ob, 1, 1, 1, 1, 1, 1, 1, 1); ob = e_widget_check_add(evas, _("Current Screen"), &(cfdata->remember.apply_zone)); - e_widget_frametable_object_append(of, ob, 1, 3, 1, 1, 1, 1, 1, 1); + e_widget_frametable_object_append(of, ob, 1, 2, 1, 1, 1, 1, 1, 1); ob = e_widget_check_add(evas, _("Skip Window List"), &(cfdata->remember.apply_skip_winlist)); + e_widget_frametable_object_append(of, ob, 1, 3, 1, 1, 1, 1, 1, 1); + ob = e_widget_check_add(evas, _("Skip Pager"), &(cfdata->remember.apply_skip_pager)); e_widget_frametable_object_append(of, ob, 1, 4, 1, 1, 1, 1, 1, 1); + ob = e_widget_check_add(evas, _("Skip Taskbar"), &(cfdata->remember.apply_skip_taskbar)); + e_widget_frametable_object_append(of, ob, 1, 5, 1, 1, 1, 1, 1, 1); e_widget_list_object_append(o, of, 1, 1, 0.5); ob = e_widget_check_add(evas, _("Match only one window"), &(cfdata->remember.apply_first_only)); diff --git a/src/bin/e_remember.c b/src/bin/e_remember.c index 1cbf7cfb1..97b0f2960 100644 --- a/src/bin/e_remember.c +++ b/src/bin/e_remember.c @@ -288,6 +288,8 @@ e_remember_update(E_Remember *rem, E_Border *bd) rem->prop.shaded = 50 + bd->shade.dir; rem->prop.skip_winlist = bd->user_skip_winlist; + rem->prop.skip_pager = bd->client.netwm.state.skip_pager; + rem->prop.skip_taskbar = bd->client.netwm.state.skip_taskbar; rem->prop.icon_preference = bd->icon_preference; e_desk_xy_get(bd->desk, &rem->prop.desk_x, &rem->prop.desk_y); diff --git a/src/bin/e_remember.h b/src/bin/e_remember.h index a4223da7f..6f950daf3 100644 --- a/src/bin/e_remember.h +++ b/src/bin/e_remember.h @@ -23,8 +23,10 @@ typedef struct _E_Remember E_Remember; #define E_REMEMBER_APPLY_ZONE (1 << 8) #define E_REMEMBER_APPLY_RUN (1 << 9) #define E_REMEMBER_APPLY_SKIP_WINLIST (1 << 10) -#define E_REMEMBER_APPLY_ICON_PREF (1 << 11) -#define E_REMEMBER_SET_FOCUS_ON_START (1 << 12) +#define E_REMEMBER_APPLY_SKIP_PAGER (1 << 11) +#define E_REMEMBER_APPLY_SKIP_TASKBAR (1 << 12) +#define E_REMEMBER_APPLY_ICON_PREF (1 << 13) +#define E_REMEMBER_SET_FOCUS_ON_START (1 << 14) #else #ifndef E_REMEMBER_H @@ -81,6 +83,8 @@ struct _E_Remember unsigned char sticky; unsigned char shaded; unsigned char skip_winlist; + unsigned char skip_pager; + unsigned char skip_taskbar; unsigned char icon_preference; int desk_x, desk_y; diff --git a/src/modules/conf_wallpaper/e_int_config_wallpaper_web.c b/src/modules/conf_wallpaper/e_int_config_wallpaper_web.c index 423844231..a1a6322de 100644 --- a/src/modules/conf_wallpaper/e_int_config_wallpaper_web.c +++ b/src/modules/conf_wallpaper/e_int_config_wallpaper_web.c @@ -8,12 +8,16 @@ #include "e_mod_main.h" #define D(x) do {printf("### DBG line %d ### ", __LINE__); printf x; fflush(stdout);} while (0) +#define MAGIC_IMPORT 0x427781cb + typedef struct _Import Import; struct _Import { - E_Config_Dialog *parent; + int magic; + + E_Config_Dialog *parent; E_Config_Dialog_Data *cfdata; - E_Dialog *dia; + E_Dialog *dia; }; struct _E_Config_Dialog_Data @@ -73,6 +77,8 @@ e_int_config_wallpaper_web (E_Config_Dialog *parent) if (!import) return NULL; + import->magic = MAGIC_IMPORT; + dia = e_dialog_new (parent->con, "E", "_wallpaper_web_dialog"); if (!dia) { @@ -89,6 +95,8 @@ e_int_config_wallpaper_web (E_Config_Dialog *parent) cfdata = E_NEW (E_Config_Dialog_Data, 1); ecore_con_url_init (); + ecore_file_download_init (); + cfdata->ecu = ecore_con_url_new ("http://fake.url"); cfdata->ready_for_edj = 0; @@ -206,6 +214,7 @@ e_int_config_wallpaper_web_del (E_Dialog *dia) { ecore_event_handler_del (cfdata->hcomplete); } + ecore_file_download_shutdown(); ecore_con_url_shutdown (); if (cfdata->tmpdir) @@ -233,8 +242,13 @@ _feed_complete (void *data, int type, void *event) euc = (Ecore_Con_Event_Url_Complete *)event; import = data; + if (import->magic != MAGIC_IMPORT) return 1; + cfdata = import->cfdata; + if (cfdata->ecu != euc->url_con) return 1; + fclose (cfdata->feed); + cfdata->feed = NULL; ecore_event_handler_del (cfdata->hdata); ecore_event_handler_del (cfdata->hcomplete); cfdata->hdata = NULL; @@ -262,7 +276,12 @@ _feed_data (void *data, int type, void *event) eud = (Ecore_Con_Event_Url_Data *)event; import = data; + if (import->magic != MAGIC_IMPORT) return 1; + cfdata = import->cfdata; + + if (cfdata->ecu != eud->url_con) return 1; + fwrite (eud->data, sizeof(unsigned char), eud->size, cfdata->feed); return 0; } @@ -597,6 +616,10 @@ _get_feed (char *url, void *data) cfdata->tmpdir = mkdtemp (strdup (tmpdir_tpl)); ecore_con_url_url_set (cfdata->ecu, url); + ecore_file_download_abort_all (); + if (cfdata->hdata) ecore_event_handler_del (cfdata->hdata); + if (cfdata->hcomplete) ecore_event_handler_del (cfdata->hcomplete); + if (cfdata->feed) fclose (cfdata->feed); cfdata->hdata = ecore_event_handler_add (ECORE_CON_EVENT_URL_DATA, _feed_data,