Convert to using a config dialog instead of config menu. Courtesy of

devilhorns.

This is the patch he posted to the mailing list two days ago.  Committed
after much testing and some discussion with variosu parties.  In
particular, it got a thourough thrashing while we tracked down the
follower confusion bug, as that required constant config changes using
the new dialog.


SVN revision: 18987
This commit is contained in:
David Walter Seikel 2005-12-13 04:47:41 +00:00
parent f3bb743da0
commit 1c52b87cab
5 changed files with 381 additions and 423 deletions

View File

@ -20,7 +20,9 @@ INCLUDES = -I. \
pkgdir = $(libdir)/enlightenment/modules/$(MODULE)/$(MODULE_ARCH)
pkg_LTLIBRARIES = module.la
module_la_SOURCES = e_mod_main.c \
e_mod_main.h
e_mod_main.h \
e_mod_config.c \
e_mod_config.h
module_la_LIBADD = @e_libs@ @dlopen_libs@
module_la_LDFLAGS = -module -avoid-version
module_la_DEPENDENCIES = $(top_builddir)/config.h

View File

@ -0,0 +1,248 @@
#include "e.h"
#include "e_mod_main.h"
#include "config.h"
typedef struct _cfdata CFData;
typedef struct _Cfg_File_Data Cfg_File_Data;
#define ICONSIZE_MICROSCOPIC 8
#define ICONSIZE_TINY 12
#define ICONSIZE_VERYSMALL 16
#define ICONSIZE_SMALL 24
#define ICONSIZE_MEDIUM 32
#define ICONSIZE_LARGE 40
#define ICONSIZE_VERYLARGE 48
#define ICONSIZE_EXTLARGE 56
#define ICONSIZE_HUGE 64
#define ICONSIZE_ENORMOUS 96
#define ICONSIZE_GIGANTIC 128
struct _cfdata
{
IBar *ibar;
/* Basic Config */
int method;
int icon_method;
int follower;
int width;
int iconsize;
/* Advanced Config */
double follow_speed;
double autoscroll_speed;
};
struct _Cfg_File_Data
{
E_Config_Dialog *cfd;
char *file;
};
/* Protos */
static Evas_Object *_create_widgets(E_Config_Dialog *cfd, Evas *evas, Config *cfdata);
static void *_create_data(E_Config_Dialog *cfd);
static void _free_data(E_Config_Dialog *cfd, CFData *cfdata);
static Evas_Object *_basic_create_widgets(E_Config_Dialog *cfd, Evas *evas, CFData *cfdata);
static int _basic_apply_data(E_Config_Dialog *cfd, CFData *cfdata);
static Evas_Object *_advanced_create_widgets(E_Config_Dialog *cfd, Evas *evas, CFData *cfdata);
static int _advanced_apply_data(E_Config_Dialog *cfd, CFData *cfdata);
IBar *ib = NULL;
void e_int_config_ibar(E_Container *con, IBar *ibar)
{
E_Config_Dialog *cfd;
E_Config_Dialog_View v;
ib = ibar;
/* Dialog Methods */
v.create_cfdata = _create_data;
v.free_cfdata = _free_data;
v.basic.apply_cfdata = _basic_apply_data;
v.basic.create_widgets = _basic_create_widgets;
v.advanced.apply_cfdata = _advanced_apply_data;
v.advanced.create_widgets = _advanced_create_widgets;
/* Create The Dialog */
cfd = e_config_dialog_new(con, _("IBar Module"), NULL, 0, &v, ibar);
}
static void _fill_data(CFData *cfdata)
{
cfdata->follower = ib->conf->follower;
cfdata->width = ib->conf->width;
if (cfdata->width == IBAR_WIDTH_AUTO) {
cfdata->method = 1;
} else {
cfdata->method = 0;
}
cfdata->iconsize = ib->conf->iconsize;
if (cfdata->iconsize<=8) cfdata->icon_method = ICONSIZE_MICROSCOPIC;
if ((cfdata->iconsize > 8) && (cfdata->iconsize <=12)) cfdata->icon_method = ICONSIZE_TINY;
if ((cfdata->iconsize > 12) && (cfdata->iconsize <=16)) cfdata->icon_method = ICONSIZE_VERYSMALL;
if ((cfdata->iconsize > 16) && (cfdata->iconsize <=24)) cfdata->icon_method = ICONSIZE_SMALL;
if ((cfdata->iconsize > 24) && (cfdata->iconsize <=32)) cfdata->icon_method = ICONSIZE_MEDIUM;
if ((cfdata->iconsize > 32) && (cfdata->iconsize <=40)) cfdata->icon_method = ICONSIZE_LARGE;
if ((cfdata->iconsize > 40) && (cfdata->iconsize <=48)) cfdata->icon_method = ICONSIZE_VERYLARGE;
if ((cfdata->iconsize > 48) && (cfdata->iconsize <=58)) cfdata->icon_method = ICONSIZE_EXTLARGE;
if ((cfdata->iconsize > 58) && (cfdata->iconsize <=64)) cfdata->icon_method = ICONSIZE_HUGE;
if ((cfdata->iconsize > 64) && (cfdata->iconsize <=96)) cfdata->icon_method = ICONSIZE_ENORMOUS;
if ((cfdata->iconsize > 96) && (cfdata->iconsize <=128)) cfdata->icon_method = ICONSIZE_GIGANTIC;
cfdata->follow_speed = ib->conf->follow_speed;
cfdata->autoscroll_speed = ib->conf->autoscroll_speed;
}
static void *_create_data(E_Config_Dialog *cfd)
{
CFData *cfdata;
cfdata = E_NEW(CFData, 1);
_fill_data(cfdata);
return cfdata;
}
static void _free_data(E_Config_Dialog *cfd, CFData *cfdata)
{
free(cfdata);
}
static Evas_Object *_basic_create_widgets(E_Config_Dialog *cfd, Evas *evas, CFData *cfdata)
{
Evas_Object *o, *of, *ob;
E_Radio_Group *rg;
o = e_widget_list_add(evas, 0, 0);
of = e_widget_framelist_add(evas, _("General Settings"), 0);
ob = e_widget_check_add(evas, _("Follower"), &(cfdata->follower));
e_widget_framelist_object_append(of, ob);
ob = e_widget_check_add(evas, _("Auto Fit Icons"), &(cfdata->method));
e_widget_framelist_object_append(of, ob);
e_widget_list_object_append(o, of, 1, 1, 0.5);
of = e_widget_framelist_add(evas, _("Icon Size"), 0);
rg = e_widget_radio_group_new(&(cfdata->icon_method));
ob = e_widget_radio_add(evas, _("Microscopic"), ICONSIZE_MICROSCOPIC, rg);
e_widget_framelist_object_append(of, ob);
ob = e_widget_radio_add(evas, _("Tiny"), ICONSIZE_TINY, rg);
e_widget_framelist_object_append(of, ob);
ob = e_widget_radio_add(evas, _("Very Small"), ICONSIZE_VERYSMALL, rg);
e_widget_framelist_object_append(of, ob);
ob = e_widget_radio_add(evas, _("Small"), ICONSIZE_SMALL, rg);
e_widget_framelist_object_append(of, ob);
ob = e_widget_radio_add(evas, _("Medium"), ICONSIZE_MEDIUM, rg);
e_widget_framelist_object_append(of, ob);
ob = e_widget_radio_add(evas, _("Large"), ICONSIZE_LARGE, rg);
e_widget_framelist_object_append(of, ob);
ob = e_widget_radio_add(evas, _("Very Large"), ICONSIZE_VERYLARGE, rg);
e_widget_framelist_object_append(of, ob);
ob = e_widget_radio_add(evas, _("Exteremely Large"), ICONSIZE_EXTLARGE, rg);
e_widget_framelist_object_append(of, ob);
ob = e_widget_radio_add(evas, _("Huge"), ICONSIZE_HUGE, rg);
e_widget_framelist_object_append(of, ob);
ob = e_widget_radio_add(evas, _("Enormous"), ICONSIZE_ENORMOUS, rg);
e_widget_framelist_object_append(of, ob);
ob = e_widget_radio_add(evas, _("Gigantic"), ICONSIZE_GIGANTIC, rg);
e_widget_framelist_object_append(of, ob);
e_widget_list_object_append(o, of, 1, 1, 0.5);
return o;
}
static int _basic_apply_data(E_Config_Dialog *cfd, CFData *cfdata)
{
e_border_button_bindings_ungrab_all();
ib->conf->follower = cfdata->follower;
if (cfdata->method == 0) {
cfdata->width = IBAR_WIDTH_FIXED;
} else {
cfdata->width = IBAR_WIDTH_AUTO;
}
ib->conf->width = cfdata->width;
if (cfdata->icon_method == ICONSIZE_MICROSCOPIC) ib->conf->iconsize = 8;
if (cfdata->icon_method == ICONSIZE_TINY) ib->conf->iconsize = 12;
if (cfdata->icon_method == ICONSIZE_VERYSMALL) ib->conf->iconsize = 16;
if (cfdata->icon_method == ICONSIZE_SMALL) ib->conf->iconsize = 24;
if (cfdata->icon_method == ICONSIZE_MEDIUM) ib->conf->iconsize = 32;
if (cfdata->icon_method == ICONSIZE_LARGE) ib->conf->iconsize = 40;
if (cfdata->icon_method == ICONSIZE_VERYLARGE) ib->conf->iconsize = 48;
if (cfdata->icon_method == ICONSIZE_EXTLARGE) ib->conf->iconsize = 56;
if (cfdata->icon_method == ICONSIZE_HUGE) ib->conf->iconsize = 64;
if (cfdata->icon_method == ICONSIZE_ENORMOUS) ib->conf->iconsize = 96;
if (cfdata->icon_method == ICONSIZE_GIGANTIC) ib->conf->iconsize = 128;
e_border_button_bindings_grab_all();
e_config_save_queue();
_ibar_bar_cb_config_updated(ib);
return 1;
}
static Evas_Object *_advanced_create_widgets(E_Config_Dialog *cfd, Evas *evas, CFData *cfdata)
{
Evas_Object *o, *of, *ob, *ot;
E_Radio_Group *rg;
o = e_widget_list_add(evas, 0, 0);
of = e_widget_framelist_add(evas, _("General Settings"), 0);
ob = e_widget_check_add(evas, _("Follower"), &(cfdata->follower));
e_widget_framelist_object_append(of, ob);
ob = e_widget_check_add(evas, _("Auto Fit Icons"), &(cfdata->method));
e_widget_framelist_object_append(of, ob);
e_widget_list_object_append(o, of, 1, 1, 0.5);
of = e_widget_framelist_add(evas, _("Icon Settings"), 0);
ob = e_widget_label_add(evas, _("Icon Size:"));
e_widget_framelist_object_append(of, ob);
ob = e_widget_slider_add(evas, 1, 0, _("%1.0f pixels"), 8, 128, 1, 0, NULL, &(cfdata->iconsize), 200);
e_widget_framelist_object_append(of, ob);
e_widget_list_object_append(o, of, 1, 1, 0.5);
/* Advanced Options */
of = e_widget_framelist_add(evas, _("Advanced Settings"), 0);
ob = e_widget_label_add(evas, _("Follow Speed:"));
e_widget_framelist_object_append(of, ob);
ob = e_widget_slider_add(evas, 1, 0, _("%1.2f"), 0.01, 1.0, 0.01, 0, &(cfdata->follow_speed), NULL,200);
e_widget_framelist_object_append(of, ob);
ob = e_widget_label_add(evas, _("Autoscroll Speed:"));
e_widget_framelist_object_append(of, ob);
ob = e_widget_slider_add(evas, 1, 0, _("%1.2f"), 0.01, 1.0, 0.01, 0, &(cfdata->autoscroll_speed), NULL,200);
e_widget_framelist_object_append(of, ob);
e_widget_list_object_append(o, of, 1, 1, 0.5);
return o;
}
static int _advanced_apply_data(E_Config_Dialog *cfd, CFData *cfdata)
{
e_border_button_bindings_ungrab_all();
ib->conf->follower = cfdata->follower;
if (cfdata->method == 0) {
cfdata->width = IBAR_WIDTH_FIXED;
} else {
cfdata->width = IBAR_WIDTH_AUTO;
}
ib->conf->width = cfdata->width;
ib->conf->iconsize = cfdata->iconsize;
ib->conf->follow_speed = cfdata->follow_speed;
ib->conf->autoscroll_speed = cfdata->autoscroll_speed;
e_border_button_bindings_grab_all();
e_config_save_queue();
_ibar_bar_cb_config_updated(ib);
return 1;
}

View File

@ -0,0 +1,8 @@
#ifdef E_TYPEDEFS
#else
#ifndef E_MOD_CONFIG_H
#define E_MOD_CONFIG_H
#include "e_mod_main.h"
EAPI void e_int_config_ibar(E_Container *con, IBar *ibar);
#endif
#endif

View File

@ -3,6 +3,7 @@
*/
#include "e.h"
#include "e_mod_main.h"
#include "e_mod_config.h"
/* TODO List:
*
@ -83,35 +84,26 @@ static void _ibar_icon_cb_mouse_down(void *data, Evas *e, Evas_Object *obj, v
static void _ibar_icon_cb_mouse_up(void *data, Evas *e, Evas_Object *obj, void *event_info);
static void _ibar_icon_cb_mouse_move(void *data, Evas *e, Evas_Object *obj, void *event_info);
static void _ibar_bar_cb_width_auto(void *data, E_Menu *m, E_Menu_Item *mi);
static void _ibar_bar_cb_follower(void *data, E_Menu *m, E_Menu_Item *mi);
#if 0
static void _ibar_icon_reorder_before(IBar_Icon *ic, IBar_Icon *before);
#endif
static void _ibar_bar_iconsize_change(IBar_Bar *ibb);
static void _ibar_bar_cb_iconsize_microscopic(void *data, E_Menu *m, E_Menu_Item *mi);
static void _ibar_bar_cb_iconsize_tiny(void *data, E_Menu *m, E_Menu_Item *mi);
static void _ibar_bar_cb_iconsize_very_small(void *data, E_Menu *m, E_Menu_Item *mi);
static void _ibar_bar_cb_iconsize_small(void *data, E_Menu *m, E_Menu_Item *mi);
static void _ibar_bar_cb_iconsize_medium(void *data, E_Menu *m, E_Menu_Item *mi);
static void _ibar_bar_cb_iconsize_large(void *data, E_Menu *m, E_Menu_Item *mi);
static void _ibar_bar_cb_iconsize_very_large(void *data, E_Menu *m, E_Menu_Item *mi);
static void _ibar_bar_cb_iconsize_extremely_large(void *data, E_Menu *m, E_Menu_Item *mi);
static void _ibar_bar_cb_iconsize_huge(void *data, E_Menu *m, E_Menu_Item *mi);
static void _ibar_bar_cb_iconsize_enormous(void *data, E_Menu *m, E_Menu_Item *mi);
static void _ibar_bar_cb_iconsize_gigantic(void *data, E_Menu *m, E_Menu_Item *mi);
static void _ibar_bar_cb_menu_enabled(void *data, E_Menu *m, E_Menu_Item *mi);
static void _ibar_bar_cb_menu_edit(void *data, E_Menu *m, E_Menu_Item *mi);
static void _ibar_bar_cb_menu_configure(void *data, E_Menu *m, E_Menu_Item *mi);
static void _ibar_drag_cb_intercept_move(void *data, Evas_Object *o, Evas_Coord x, Evas_Coord y);
static void _ibar_drag_cb_intercept_resize(void *data, Evas_Object *o, Evas_Coord w, Evas_Coord h);
/* Config Updated Function Protos */
static void _ibar_bar_cb_width_auto(void *data);
static void _ibar_bar_cb_follower(void *data);
static void _ibar_bar_cb_iconsize_change(void *data);
/* public module routines. all modules must have these */
E_Module_Api e_modapi =
E_Module_Api e_modapi =
{
E_MODULE_API_VERSION,
"IBar"
"IBar"
};
void *
@ -162,7 +154,7 @@ e_modapi_info(E_Module *m)
int
e_modapi_about(E_Module *m)
{
e_module_dialog_show(_("Enlightenment IBar Module"),
e_module_dialog_show(_("Enlightenment IBar Module"),
_("This is the IBar Application Launcher bar module for Enlightenment.<br>"
"It is a first example module and is being used to flesh out several<br>"
"interfaces in Enlightenment 0.17.0. It is under heavy development,<br>"
@ -217,7 +209,7 @@ _ibar_new()
E_CONFIG_LIMIT(ib->conf->autoscroll_speed, 0.01, 1.0);
E_CONFIG_LIMIT(ib->conf->iconsize, 2, 400);
E_CONFIG_LIMIT(ib->conf->width, -2, -1);
_ibar_config_menu_new(ib);
if (ib->conf->appdir[0] != '/')
@ -270,14 +262,9 @@ _ibar_new()
/* Menu */
_ibar_bar_menu_new(ibb);
/* Add main menu to bar menu */
mi = e_menu_item_new(ibb->menu);
e_menu_item_label_set(mi, _("Options"));
e_menu_item_submenu_set(mi, ib->config_menu_options);
mi = e_menu_item_new(ibb->menu);
e_menu_item_label_set(mi, _("Size"));
e_menu_item_submenu_set(mi, ib->config_menu_size);
mi = e_menu_item_new(ib->config_menu);
e_menu_item_label_set(mi, _("Config Dialog"));
e_menu_item_callback_set(mi, _ibar_bar_cb_menu_configure, ibb);
mi = e_menu_item_new(ib->config_menu);
e_menu_item_label_set(mi, con->name);
@ -306,8 +293,6 @@ _ibar_free(IBar *ib)
if (ib->conf->appdir) evas_stringshare_del(ib->conf->appdir);
e_app_change_callback_del(_ibar_app_change, ib);
e_object_del(E_OBJECT(ib->config_menu_options));
e_object_del(E_OBJECT(ib->config_menu_size));
e_object_del(E_OBJECT(ib->config_menu));
evas_list_free(ib->conf->bars);
free(ib->conf);
@ -341,7 +326,7 @@ _ibar_app_change(void *data, E_App *a, E_App_Change ch)
for (ll = ib->apps->subapps; ll; ll = ll->next)
{
E_App *a2;
a2 = ll->data;
ic = _ibar_icon_find(ibb, a2);
if (ic) _ibar_icon_reorder_after(ic, NULL);
@ -403,7 +388,7 @@ _ibar_app_change(void *data, E_App *a, E_App_Change ch)
if (e_app_is_parent(ib->apps, a))
{
IBar_Icon *ic;
ic = _ibar_icon_find(ibb, a);
if (ic)
{
@ -436,7 +421,7 @@ _ibar_app_change(void *data, E_App *a, E_App_Change ch)
if (a->startup_notify)
{
IBar_Icon *ic;
ic = _ibar_icon_find(ibb, a);
if (ic)
{
@ -613,7 +598,7 @@ _ibar_bar_free(IBar_Bar *ibb)
ibb->drag_object = NULL;
if (ibb->drag_object_overlay) evas_object_del(ibb->drag_object_overlay);
ibb->drag_object_overlay = NULL;
e_gadman_client_save(ibb->gmc);
e_object_del(E_OBJECT(ibb->gmc));
@ -641,13 +626,29 @@ _ibar_bar_menu_new(IBar_Bar *ibb)
if (ibb->conf->enabled) e_menu_item_toggle_set(mi, 1);
e_menu_item_callback_set(mi, _ibar_bar_cb_menu_enabled, ibb);
*/
/* Config */
mi = e_menu_item_new(mn);
e_menu_item_label_set(mi, _("Config Dialog"));
e_menu_item_callback_set(mi, _ibar_bar_cb_menu_configure, ibb);
/* Edit */
mi = e_menu_item_new(mn);
e_menu_item_label_set(mi, _("Edit Mode"));
e_menu_item_callback_set(mi, _ibar_bar_cb_menu_edit, ibb);
}
static void
_ibar_bar_cb_menu_configure(void *data, E_Menu *m, E_Menu_Item *mi)
{
IBar_Bar *ibb;
E_Config_Dialog *cfd;
ibb = data;
if (!ibb) return;
e_int_config_ibar(ibb->con, ibb->ibar);
}
static void
_ibar_bar_enable(IBar_Bar *ibb)
{
@ -674,7 +675,7 @@ static IBar_Icon *
_ibar_icon_new(IBar_Bar *ibb, E_App *a)
{
IBar_Icon *ic;
// char *str;
// char *str;
Evas_Object *o;
Evas_Coord w, h;
@ -823,114 +824,9 @@ void
_ibar_config_menu_new(IBar *ib)
{
E_Menu *mn;
E_Menu_Item *mi;
mn = e_menu_new();
ib->config_menu = mn;
mn = e_menu_new();
ib->config_menu_options = mn;
mi = e_menu_item_new(mn);
e_menu_item_label_set(mi, _("Auto fit icons"));
e_menu_item_check_set(mi, 1);
if (ib->conf->width == IBAR_WIDTH_AUTO) e_menu_item_toggle_set(mi, 1);
e_menu_item_callback_set(mi, _ibar_bar_cb_width_auto, ib);
mi = e_menu_item_new(mn);
e_menu_item_label_set(mi, _("Follower"));
e_menu_item_check_set(mi, 1);
if (ib->conf->follower) e_menu_item_toggle_set(mi, 1);
e_menu_item_callback_set(mi, _ibar_bar_cb_follower, ib);
mn = e_menu_new();
ib->config_menu_size = mn;
mi = e_menu_item_new(mn);
e_menu_item_label_set(mi, _("Microscopic"));
e_menu_item_radio_set(mi, 1);
e_menu_item_radio_group_set(mi, 2);
if (ib->conf->iconsize == 8) e_menu_item_toggle_set(mi, 1);
e_menu_item_callback_set(mi, _ibar_bar_cb_iconsize_microscopic, ib);
mi = e_menu_item_new(mn);
e_menu_item_label_set(mi, _("Tiny"));
e_menu_item_radio_set(mi, 1);
e_menu_item_radio_group_set(mi, 2);
if (ib->conf->iconsize == 12) e_menu_item_toggle_set(mi, 1);
e_menu_item_callback_set(mi, _ibar_bar_cb_iconsize_tiny, ib);
mi = e_menu_item_new(mn);
e_menu_item_label_set(mi, _("Very Small"));
e_menu_item_radio_set(mi, 1);
e_menu_item_radio_group_set(mi, 2);
if (ib->conf->iconsize == 16) e_menu_item_toggle_set(mi, 1);
e_menu_item_callback_set(mi, _ibar_bar_cb_iconsize_very_small, ib);
mi = e_menu_item_new(mn);
e_menu_item_label_set(mi, _("Small"));
e_menu_item_radio_set(mi, 1);
e_menu_item_radio_group_set(mi, 2);
if (ib->conf->iconsize == 24) e_menu_item_toggle_set(mi, 1);
e_menu_item_callback_set(mi, _ibar_bar_cb_iconsize_small, ib);
mi = e_menu_item_new(mn);
e_menu_item_label_set(mi, _("Medium"));
e_menu_item_radio_set(mi, 1);
e_menu_item_radio_group_set(mi, 2);
if (ib->conf->iconsize == 32) e_menu_item_toggle_set(mi, 1);
e_menu_item_callback_set(mi, _ibar_bar_cb_iconsize_medium, ib);
mi = e_menu_item_new(mn);
e_menu_item_label_set(mi, _("Large"));
e_menu_item_radio_set(mi, 1);
e_menu_item_radio_group_set(mi, 2);
if (ib->conf->iconsize == 40) e_menu_item_toggle_set(mi, 1);
e_menu_item_callback_set(mi, _ibar_bar_cb_iconsize_large, ib);
mi = e_menu_item_new(mn);
e_menu_item_label_set(mi, _("Very Large"));
e_menu_item_radio_set(mi, 1);
e_menu_item_radio_group_set(mi, 2);
if (ib->conf->iconsize == 48) e_menu_item_toggle_set(mi, 1);
e_menu_item_callback_set(mi, _ibar_bar_cb_iconsize_very_large, ib);
mi = e_menu_item_new(mn);
e_menu_item_label_set(mi, _("Extremely Large"));
e_menu_item_radio_set(mi, 1);
e_menu_item_radio_group_set(mi, 2);
if (ib->conf->iconsize == 56) e_menu_item_toggle_set(mi, 1);
e_menu_item_callback_set(mi, _ibar_bar_cb_iconsize_extremely_large, ib);
mi = e_menu_item_new(mn);
e_menu_item_label_set(mi, _("Huge"));
e_menu_item_radio_set(mi, 1);
e_menu_item_radio_group_set(mi, 2);
if (ib->conf->iconsize == 64) e_menu_item_toggle_set(mi, 1);
e_menu_item_callback_set(mi, _ibar_bar_cb_iconsize_huge, ib);
mi = e_menu_item_new(mn);
e_menu_item_label_set(mi, _("Enormous"));
e_menu_item_radio_set(mi, 1);
e_menu_item_radio_group_set(mi, 2);
if (ib->conf->iconsize == 96) e_menu_item_toggle_set(mi, 1);
e_menu_item_callback_set(mi, _ibar_bar_cb_iconsize_enormous, ib);
mi = e_menu_item_new(mn);
e_menu_item_label_set(mi, _("Gigantic"));
e_menu_item_radio_set(mi, 1);
e_menu_item_radio_group_set(mi, 2);
if (ib->conf->iconsize == 128) e_menu_item_toggle_set(mi, 1);
e_menu_item_callback_set(mi, _ibar_bar_cb_iconsize_gigantic, ib);
/* Submenus */
mi = e_menu_item_new(ib->config_menu);
e_menu_item_label_set(mi, _("Options"));
e_menu_item_submenu_set(mi, ib->config_menu_options);
mi = e_menu_item_new(ib->config_menu);
e_menu_item_label_set(mi, _("Size"));
e_menu_item_submenu_set(mi, ib->config_menu_size);
}
#if 0
@ -1309,8 +1205,8 @@ _ibar_icon_cb_mouse_down(void *data, Evas *e, Evas_Object *obj, void *event_info
{
drag_x = ev->output.x;
drag_y = ev->output.y;
drag_start = 1;
drag = 0;
drag_start = 1;
drag = 0;
}
}
@ -1345,7 +1241,7 @@ _ibar_icon_cb_mouse_move(void *data, Evas *e, Evas_Object *obj, void *event_info
dx = ev->cur.output.x - drag_x;
dy = ev->cur.output.y - drag_y;
if (((dx * dx) + (dy * dy)) >
if (((dx * dx) + (dy * dy)) >
(e_config->drag_resist * e_config->drag_resist))
{
E_Drag *d;
@ -1688,7 +1584,7 @@ _ibar_bar_cb_drop(void *data, const char *type, void *event)
"does not have a matching application file.<br>"
"<br>"
"The icon cannot be added to IBar."
));
));
e_dialog_button_add(dia, _("OK"), NULL, NULL, NULL);
e_dialog_button_focus_num(dia, 1);
e_win_centered_set(dia->win, 1);
@ -1750,40 +1646,65 @@ _ibar_bar_cb_gmc_change(void *data, E_Gadman_Client *gmc, E_Gadman_Change change
switch (change)
{
case E_GADMAN_CHANGE_MOVE_RESIZE:
e_gadman_client_geometry_get(ibb->gmc, &ibb->x, &ibb->y, &ibb->w, &ibb->h);
e_gadman_client_geometry_get(ibb->gmc, &ibb->x, &ibb->y, &ibb->w, &ibb->h);
edje_extern_object_min_size_set(ibb->box_object, 0, 0);
edje_object_part_swallow(ibb->bar_object, "items", ibb->box_object);
edje_extern_object_min_size_set(ibb->box_object, 0, 0);
edje_object_part_swallow(ibb->bar_object, "items", ibb->box_object);
evas_object_move(ibb->bar_object, ibb->x, ibb->y);
if (ibb->overlay_object)
evas_object_move(ibb->overlay_object, ibb->x, ibb->y);
evas_object_resize(ibb->bar_object, ibb->w, ibb->h);
if (ibb->overlay_object)
evas_object_resize(ibb->overlay_object, ibb->w, ibb->h);
evas_object_move(ibb->bar_object, ibb->x, ibb->y);
if (ibb->overlay_object)
evas_object_move(ibb->overlay_object, ibb->x, ibb->y);
evas_object_resize(ibb->bar_object, ibb->w, ibb->h);
if (ibb->overlay_object)
evas_object_resize(ibb->overlay_object, ibb->w, ibb->h);
_ibar_bar_follower_reset(ibb);
_ibar_bar_timer_handle(ibb);
_ibar_bar_follower_reset(ibb);
_ibar_bar_timer_handle(ibb);
e_drop_handler_geometry_set(ibb->drop_handler,
ibb->x + ibb->bar_inset.l, ibb->y + ibb->bar_inset.t,
ibb->w - (ibb->bar_inset.l + ibb->bar_inset.r),
ibb->h - (ibb->bar_inset.t + ibb->bar_inset.b));
break;
e_drop_handler_geometry_set(ibb->drop_handler,
ibb->x + ibb->bar_inset.l, ibb->y + ibb->bar_inset.t,
ibb->w - (ibb->bar_inset.l + ibb->bar_inset.r),
ibb->h - (ibb->bar_inset.t + ibb->bar_inset.b));
break;
case E_GADMAN_CHANGE_EDGE:
_ibar_bar_edge_change(ibb, e_gadman_client_edge_get(ibb->gmc));
break;
_ibar_bar_edge_change(ibb, e_gadman_client_edge_get(ibb->gmc));
break;
case E_GADMAN_CHANGE_RAISE:
case E_GADMAN_CHANGE_ZONE:
/* FIXME
* Must we do something here?
*/
break;
break;
}
}
void
_ibar_bar_cb_config_updated(void *data)
{
/* Call Any Needed Funcs To Let Module Handle Config Changes */
_ibar_bar_cb_follower(data);
_ibar_bar_cb_width_auto(data);
_ibar_bar_cb_iconsize_change(data);
}
static void
_ibar_bar_cb_width_auto(void *data)
{
IBar *ib;
IBar_Bar *ibb;
Evas_List *l;
ib = data;
for (l = ib->bars; l; l = l->next)
{
ibb = l->data;
_ibar_bar_update_policy(ibb);
_ibar_bar_frame_resize(ibb);
}
}
static void
_ibar_bar_cb_width_auto(void *data, E_Menu *m, E_Menu_Item *mi)
_ibar_bar_cb_follower(void *data)
{
IBar *ib;
IBar_Bar *ibb;
@ -1791,43 +1712,9 @@ _ibar_bar_cb_width_auto(void *data, E_Menu *m, E_Menu_Item *mi)
Evas_List *l;
ib = data;
enabled = e_menu_item_toggle_get(mi);
if ((enabled) && (ib->conf->width == IBAR_WIDTH_FIXED))
enabled = ib->conf->follower;
if (enabled)
{
ib->conf->width = IBAR_WIDTH_AUTO;
for (l = ib->bars; l; l = l->next)
{
ibb = l->data;
_ibar_bar_update_policy(ibb);
_ibar_bar_frame_resize(ibb);
}
}
else if (!(enabled) && (ib->conf->width == IBAR_WIDTH_AUTO))
{
ib->conf->width = IBAR_WIDTH_FIXED;
for (l = ib->bars; l; l = l->next)
{
ibb = l->data;
_ibar_bar_update_policy(ibb);
_ibar_bar_frame_resize(ibb);
}
}
e_config_save_queue();
}
static void
_ibar_bar_cb_follower(void *data, E_Menu *m, E_Menu_Item *mi)
{
IBar *ib;
IBar_Bar *ibb;
unsigned char enabled;
Evas_List *l;
ib = data;
enabled = e_menu_item_toggle_get(mi);
if ((enabled) && (!ib->conf->follower))
{
ib->conf->follower = 1;
for (l = ib->bars; l; l = l->next)
{
Evas_Object *o;
@ -1846,9 +1733,8 @@ _ibar_bar_cb_follower(void *data, E_Menu *m, E_Menu_Item *mi)
evas_object_show(o);
}
}
else if (!(enabled) && (ib->conf->follower))
else if (!enabled)
{
ib->conf->follower = 0;
for (l = ib->bars; l; l = l->next)
{
ibb = l->data;
@ -1857,237 +1743,47 @@ _ibar_bar_cb_follower(void *data, E_Menu *m, E_Menu_Item *mi)
ibb->overlay_object = NULL;
}
}
e_config_save_queue();
}
static void
_ibar_bar_iconsize_change(IBar_Bar *ibb)
{
Evas_List *l;
e_box_freeze(ibb->box_object);
for (l = ibb->icons; l; l = l->next)
{
IBar_Icon *ic;
Evas_Object *o;
Evas_Coord w, h;
ic = l->data;
o = ic->icon_object;
evas_object_resize(o, ibb->ibar->conf->iconsize, ibb->ibar->conf->iconsize);
edje_object_part_swallow(ic->bg_object, "item", o);
w = ibb->ibar->conf->iconsize + ibb->icon_inset.l + ibb->icon_inset.r;
h = ibb->ibar->conf->iconsize + ibb->icon_inset.t + ibb->icon_inset.b;
e_box_pack_options_set(ic->bg_object,
1, 1, /* fill */
0, 0, /* expand */
0.5, 0.5, /* align */
w, h, /* min */
w, h /* max */
);
}
e_box_thaw(ibb->box_object);
_ibar_bar_frame_resize(ibb);
}
static void
_ibar_bar_cb_iconsize_microscopic(void *data, E_Menu *m, E_Menu_Item *mi)
_ibar_bar_cb_iconsize_change(void *data)
{
IBar *ib;
Evas_List *l;
Evas_List *l, *ll;
ib = data;
ib->conf->iconsize = 8;
for (l = ib->bars; l; l = l->next)
{
IBar_Bar *ibb;
ibb = l->data;
_ibar_bar_iconsize_change(ibb);
e_box_freeze(ibb->box_object);
for (ll = ibb->icons; ll; ll = ll->next)
{
IBar_Icon *ic;
Evas_Object *o;
Evas_Coord w, h;
ic = ll->data;
o = ic->icon_object;
evas_object_resize(o, ibb->ibar->conf->iconsize, ibb->ibar->conf->iconsize);
edje_object_part_swallow(ic->bg_object, "item", o);
w = ibb->ibar->conf->iconsize + ibb->icon_inset.l + ibb->icon_inset.r;
h = ibb->ibar->conf->iconsize + ibb->icon_inset.t + ibb->icon_inset.b;
e_box_pack_options_set(ic->bg_object,
1, 1, /* fill */
0, 0, /* expand */
0.5, 0.5, /* align */
w, h, /* min */
w, h /* max */
);
}
e_box_thaw(ibb->box_object);
_ibar_bar_frame_resize(ibb);
}
e_config_save_queue();
}
static void
_ibar_bar_cb_iconsize_tiny(void *data, E_Menu *m, E_Menu_Item *mi)
{
IBar *ib;
Evas_List *l;
ib = data;
ib->conf->iconsize = 12;
for (l = ib->bars; l; l = l->next)
{
IBar_Bar *ibb;
ibb = l->data;
_ibar_bar_iconsize_change(ibb);
}
e_config_save_queue();
}
static void
_ibar_bar_cb_iconsize_very_small(void *data, E_Menu *m, E_Menu_Item *mi)
{
IBar *ib;
Evas_List *l;
ib = data;
ib->conf->iconsize = 16;
for (l = ib->bars; l; l = l->next)
{
IBar_Bar *ibb;
ibb = l->data;
_ibar_bar_iconsize_change(ibb);
}
e_config_save_queue();
}
static void
_ibar_bar_cb_iconsize_small(void *data, E_Menu *m, E_Menu_Item *mi)
{
IBar *ib;
Evas_List *l;
ib = data;
ib->conf->iconsize = 24;
for (l = ib->bars; l; l = l->next)
{
IBar_Bar *ibb;
ibb = l->data;
_ibar_bar_iconsize_change(ibb);
}
e_config_save_queue();
}
static void
_ibar_bar_cb_iconsize_medium(void *data, E_Menu *m, E_Menu_Item *mi)
{
IBar *ib;
Evas_List *l;
ib = data;
ib->conf->iconsize = 32;
for (l = ib->bars; l; l = l->next)
{
IBar_Bar *ibb;
ibb = l->data;
_ibar_bar_iconsize_change(ibb);
}
e_config_save_queue();
}
static void
_ibar_bar_cb_iconsize_large(void *data, E_Menu *m, E_Menu_Item *mi)
{
IBar *ib;
Evas_List *l;
ib = data;
ib->conf->iconsize = 40;
for (l = ib->bars; l; l = l->next)
{
IBar_Bar *ibb;
ibb = l->data;
_ibar_bar_iconsize_change(ibb);
}
e_config_save_queue();
}
static void
_ibar_bar_cb_iconsize_very_large(void *data, E_Menu *m, E_Menu_Item *mi)
{
IBar *ib;
Evas_List *l;
ib = data;
ib->conf->iconsize = 48;
for (l = ib->bars; l; l = l->next)
{
IBar_Bar *ibb;
ibb = l->data;
_ibar_bar_iconsize_change(ibb);
}
e_config_save_queue();
}
static void
_ibar_bar_cb_iconsize_extremely_large(void *data, E_Menu *m, E_Menu_Item *mi)
{
IBar *ib;
Evas_List *l;
ib = data;
ib->conf->iconsize = 56;
for (l = ib->bars; l; l = l->next)
{
IBar_Bar *ibb;
ibb = l->data;
_ibar_bar_iconsize_change(ibb);
}
e_config_save_queue();
}
static void
_ibar_bar_cb_iconsize_huge(void *data, E_Menu *m, E_Menu_Item *mi)
{
IBar *ib;
Evas_List *l;
ib = data;
ib->conf->iconsize = 64;
for (l = ib->bars; l; l = l->next)
{
IBar_Bar *ibb;
ibb = l->data;
_ibar_bar_iconsize_change(ibb);
}
e_config_save_queue();
}
static void
_ibar_bar_cb_iconsize_enormous(void *data, E_Menu *m, E_Menu_Item *mi)
{
IBar *ib;
Evas_List *l;
ib = data;
ib->conf->iconsize = 96;
for (l = ib->bars; l; l = l->next)
{
IBar_Bar *ibb;
ibb = l->data;
_ibar_bar_iconsize_change(ibb);
}
e_config_save_queue();
}
static void
_ibar_bar_cb_iconsize_gigantic(void *data, E_Menu *m, E_Menu_Item *mi)
{
IBar *ib;
Evas_List *l;
ib = data;
ib->conf->iconsize = 128;
for (l = ib->bars; l; l = l->next)
{
IBar_Bar *ibb;
ibb = l->data;
_ibar_bar_iconsize_change(ibb);
}
e_config_save_queue();
}
static void
@ -2099,11 +1795,11 @@ _ibar_bar_cb_menu_enabled(void *data, E_Menu *m, E_Menu_Item *mi)
ibb = data;
enabled = e_menu_item_toggle_get(mi);
if ((ibb->conf->enabled) && (!enabled))
{
{
_ibar_bar_disable(ibb);
}
else if ((!ibb->conf->enabled) && (enabled))
{
{
_ibar_bar_enable(ibb);
}
}

View File

@ -97,4 +97,8 @@ EAPI int e_modapi_save (E_Module *m);
EAPI int e_modapi_info (E_Module *m);
EAPI int e_modapi_about (E_Module *m);
EAPI void _ibar_bar_cb_config_updated(void *data);
//EAPI void _ibar_bar_cb_width_auto(void *data);
//EAPI void _ibar_bar_cb_iconsize_change(void *data);
#endif