forked from enlightenment/enlightenment
parent
4850357e65
commit
582ce9a64a
|
@ -20,6 +20,7 @@ static void _randr_menu_cb_store(void *data, E_Menu *m, E_Menu_Item *mi);
|
||||||
static void _randr_menu_cb_resolution_change(void *data, E_Menu *m, E_Menu_Item *mi);
|
static void _randr_menu_cb_resolution_change(void *data, E_Menu *m, E_Menu_Item *mi);
|
||||||
|
|
||||||
static E_Config_DD *conf_edd;
|
static E_Config_DD *conf_edd;
|
||||||
|
static E_Config_DD *conf_manager_edd;
|
||||||
|
|
||||||
void *
|
void *
|
||||||
e_modapi_init(E_Module *m)
|
e_modapi_init(E_Module *m)
|
||||||
|
@ -69,7 +70,9 @@ e_modapi_save(E_Module *m)
|
||||||
int
|
int
|
||||||
e_modapi_info(E_Module *m)
|
e_modapi_info(E_Module *m)
|
||||||
{
|
{
|
||||||
|
/*
|
||||||
char buf[4096];
|
char buf[4096];
|
||||||
|
*/
|
||||||
|
|
||||||
m->label = strdup(_("Randr"));
|
m->label = strdup(_("Randr"));
|
||||||
/*
|
/*
|
||||||
|
@ -95,17 +98,50 @@ _randr_new(void)
|
||||||
e = E_NEW(Randr, 1);
|
e = E_NEW(Randr, 1);
|
||||||
if (!e) return NULL;
|
if (!e) return NULL;
|
||||||
|
|
||||||
|
conf_manager_edd = E_CONFIG_DD_NEW("Randr_Config_Manager", Config_Manager);
|
||||||
|
#undef T
|
||||||
|
#undef D
|
||||||
|
#define T Config_Manager
|
||||||
|
#define D conf_manager_edd
|
||||||
|
E_CONFIG_VAL(D, T, manager, INT);
|
||||||
|
E_CONFIG_VAL(D, T, width, INT);
|
||||||
|
E_CONFIG_VAL(D, T, height, INT);
|
||||||
|
|
||||||
conf_edd = E_CONFIG_DD_NEW("Randr_Config", Config);
|
conf_edd = E_CONFIG_DD_NEW("Randr_Config", Config);
|
||||||
#undef T
|
#undef T
|
||||||
#undef D
|
#undef D
|
||||||
#define T Config
|
#define T Config
|
||||||
#define D conf_edd
|
#define D conf_edd
|
||||||
E_CONFIG_VAL(D, T, store, INT);
|
E_CONFIG_VAL(D, T, store, INT);
|
||||||
E_CONFIG_VAL(D, T, width, INT);
|
E_CONFIG_LIST(D, T, managers, conf_manager_edd);
|
||||||
E_CONFIG_VAL(D, T, height, INT);
|
|
||||||
|
|
||||||
e->conf = e_config_domain_load("module.randr", conf_edd);
|
e->conf = e_config_domain_load("module.randr", conf_edd);
|
||||||
if (!e->conf) e->conf = E_NEW(Config, 1);
|
if (!e->conf)
|
||||||
|
{
|
||||||
|
e->conf = E_NEW(Config, 1);
|
||||||
|
e->conf->store = 1;
|
||||||
|
}
|
||||||
|
else if ((e->conf->store) && (e->conf->managers))
|
||||||
|
{
|
||||||
|
/* Restore resoultion */
|
||||||
|
Evas_List *l;
|
||||||
|
Ecore_X_Screen_Size size;
|
||||||
|
|
||||||
|
for (l = e->conf->managers; l; l = l->next)
|
||||||
|
{
|
||||||
|
E_Manager *man;
|
||||||
|
Config_Manager *cm;
|
||||||
|
|
||||||
|
cm = l->data;
|
||||||
|
man = e_manager_number_get(cm->manager);
|
||||||
|
if (man)
|
||||||
|
{
|
||||||
|
size.width = cm->width;
|
||||||
|
size.height = cm->height;
|
||||||
|
ecore_x_randr_screen_size_set(man->root, size);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
_randr_config_menu_new(e);
|
_randr_config_menu_new(e);
|
||||||
|
|
||||||
|
@ -119,13 +155,19 @@ _randr_new(void)
|
||||||
static void
|
static void
|
||||||
_randr_free(Randr *e)
|
_randr_free(Randr *e)
|
||||||
{
|
{
|
||||||
|
Evas_List *l;
|
||||||
|
|
||||||
E_CONFIG_DD_FREE(conf_edd);
|
E_CONFIG_DD_FREE(conf_edd);
|
||||||
|
E_CONFIG_DD_FREE(conf_manager_edd);
|
||||||
|
|
||||||
e_object_del(E_OBJECT(e->config_menu));
|
e_object_del(E_OBJECT(e->config_menu));
|
||||||
if (e->resolution_menu)
|
if (e->resolution_menu)
|
||||||
e_object_del(E_OBJECT(e->resolution_menu));
|
e_object_del(E_OBJECT(e->resolution_menu));
|
||||||
|
|
||||||
e_int_menus_menu_augmentation_del("config", e->augmentation);
|
e_int_menus_menu_augmentation_del("config", e->augmentation);
|
||||||
|
for (l = e->conf->managers; l; l = l->next)
|
||||||
|
free(l->data);
|
||||||
|
evas_list_free(e->conf->managers);
|
||||||
free(e->conf);
|
free(e->conf);
|
||||||
free(e);
|
free(e);
|
||||||
}
|
}
|
||||||
|
@ -221,11 +263,38 @@ _randr_menu_cb_resolution_change(void *data, E_Menu *m, E_Menu_Item *mi)
|
||||||
{
|
{
|
||||||
Randr *e;
|
Randr *e;
|
||||||
Ecore_X_Screen_Size size;
|
Ecore_X_Screen_Size size;
|
||||||
|
Config_Manager *cm = NULL;
|
||||||
|
Evas_List *l;
|
||||||
|
|
||||||
e = data;
|
e = data;
|
||||||
if (sscanf(mi->label, "%dx%d", &size.width, &size.height) != 2) return;
|
if (sscanf(mi->label, "%dx%d", &size.width, &size.height) != 2) return;
|
||||||
ecore_x_randr_screen_size_set(m->zone->container->manager->root, size);
|
ecore_x_randr_screen_size_set(m->zone->container->manager->root, size);
|
||||||
|
|
||||||
e->conf->width = size.width;
|
/* Find this manager config */
|
||||||
e->conf->height = size.height;
|
for (l = e->conf->managers; l; l = l->next)
|
||||||
|
{
|
||||||
|
Config_Manager *current;
|
||||||
|
|
||||||
|
current = l->data;
|
||||||
|
if (current->manager == m->zone->container->manager->num)
|
||||||
|
{
|
||||||
|
cm = current;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
/* If not found, create new config */
|
||||||
|
if (!cm)
|
||||||
|
{
|
||||||
|
cm = E_NEW(Config_Manager, 1);
|
||||||
|
if (cm)
|
||||||
|
e->conf->managers = evas_list_append(e->conf->managers, cm);
|
||||||
|
}
|
||||||
|
/* Save config */
|
||||||
|
if (cm)
|
||||||
|
{
|
||||||
|
cm->manager = m->zone->container->manager->num;
|
||||||
|
cm->width = size.width;
|
||||||
|
cm->height = size.height;
|
||||||
|
}
|
||||||
|
e_config_save_queue();
|
||||||
}
|
}
|
||||||
|
|
|
@ -4,12 +4,19 @@
|
||||||
#ifndef E_MOD_MAIN_H
|
#ifndef E_MOD_MAIN_H
|
||||||
#define E_MOD_MAIN_H
|
#define E_MOD_MAIN_H
|
||||||
|
|
||||||
typedef struct _Config Config;
|
typedef struct _Config Config;
|
||||||
typedef struct _Randr Randr;
|
typedef struct _Config_Manager Config_Manager;
|
||||||
|
typedef struct _Randr Randr;
|
||||||
|
|
||||||
struct _Config
|
struct _Config
|
||||||
{
|
{
|
||||||
int store;
|
int store;
|
||||||
|
Evas_List *managers;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct _Config_Manager
|
||||||
|
{
|
||||||
|
int manager;
|
||||||
int width;
|
int width;
|
||||||
int height;
|
int height;
|
||||||
};
|
};
|
||||||
|
|
Loading…
Reference in New Issue