|
@ -798,6 +798,7 @@ AC_E_OPTIONAL_MODULE([backlight], true)
|
||||||
AC_E_OPTIONAL_MODULE([tasks], true)
|
AC_E_OPTIONAL_MODULE([tasks], true)
|
||||||
AC_E_OPTIONAL_MODULE([conf_randr], true)
|
AC_E_OPTIONAL_MODULE([conf_randr], true)
|
||||||
AC_E_OPTIONAL_MODULE([xkbswitch], true)
|
AC_E_OPTIONAL_MODULE([xkbswitch], true)
|
||||||
|
AC_E_OPTIONAL_MODULE([tiling], true)
|
||||||
|
|
||||||
SUSPEND=""
|
SUSPEND=""
|
||||||
HIBERNATE=""
|
HIBERNATE=""
|
||||||
|
@ -954,6 +955,8 @@ src/modules/tasks/Makefile
|
||||||
src/modules/tasks/module.desktop
|
src/modules/tasks/module.desktop
|
||||||
src/modules/xkbswitch/Makefile
|
src/modules/xkbswitch/Makefile
|
||||||
src/modules/xkbswitch/module.desktop
|
src/modules/xkbswitch/module.desktop
|
||||||
|
src/modules/tiling/Makefile
|
||||||
|
src/modules/tiling/module.desktop
|
||||||
src/preload/Makefile
|
src/preload/Makefile
|
||||||
data/Makefile
|
data/Makefile
|
||||||
data/images/Makefile
|
data/images/Makefile
|
||||||
|
|
|
@ -250,6 +250,9 @@ src/modules/systray/e_mod_main.c
|
||||||
src/modules/shot/e_mod_main.c
|
src/modules/shot/e_mod_main.c
|
||||||
src/modules/tasks/e_mod_main.c
|
src/modules/tasks/e_mod_main.c
|
||||||
src/modules/tasks/e_mod_config.c
|
src/modules/tasks/e_mod_config.c
|
||||||
|
src/modules/tiling/e_mod_config.c
|
||||||
|
src/modules/tiling/e_mod_tiling.c
|
||||||
|
src/modules/tiling/e_mod_tiling.h
|
||||||
src/modules/xkbswitch/e_mod_main.c
|
src/modules/xkbswitch/e_mod_main.c
|
||||||
src/modules/xkbswitch/e_mod_config.c
|
src/modules/xkbswitch/e_mod_config.c
|
||||||
src/modules/xkbswitch/e_mod_parse.c
|
src/modules/xkbswitch/e_mod_parse.c
|
||||||
|
|
|
@ -195,6 +195,10 @@ if USE_MODULE_XKBSWITCH
|
||||||
SUBDIRS += xkbswitch
|
SUBDIRS += xkbswitch
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
if USE_MODULE_TILING
|
||||||
|
SUBDIRS += tiling
|
||||||
|
endif
|
||||||
|
|
||||||
#if HAVE_WAYLAND_DRM
|
#if HAVE_WAYLAND_DRM
|
||||||
# SUBDIRS += wl_drm
|
# SUBDIRS += wl_drm
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -0,0 +1,2 @@
|
||||||
|
Boris Faure <billiob@gmail.com>
|
||||||
|
Based on original Tiling module by Michael Stapelberg <michael+e17@stapelberg.de>
|
|
@ -0,0 +1,15 @@
|
||||||
|
v0.9 December 11, 2011
|
||||||
|
* restore border and maximized state when untiling
|
||||||
|
* add setting to stack in rows or columns
|
||||||
|
* toggle between rows and columns
|
||||||
|
* add setting to choose key hints
|
||||||
|
* add setting whether to display the window title
|
||||||
|
|
||||||
|
v0.5 July 17, 2011
|
||||||
|
* swap windows
|
||||||
|
* move windows
|
||||||
|
* change focus to identified window
|
||||||
|
* move transitions
|
||||||
|
|
||||||
|
v0.1 May 14, 2011
|
||||||
|
* basic tiling
|
|
@ -0,0 +1,38 @@
|
||||||
|
MAINTAINERCLEANFILES = Makefile.in module.desktop
|
||||||
|
MODULE = tiling
|
||||||
|
|
||||||
|
filesdir = $(libdir)/enlightenment/modules/$(MODULE)
|
||||||
|
files_DATA = e-module-$(MODULE).edj module.desktop
|
||||||
|
|
||||||
|
EXTRA_DIST = $(files_DATA) \
|
||||||
|
e-module-$(MODULE).edc \
|
||||||
|
module.desktop.in \
|
||||||
|
images/module_icon.png
|
||||||
|
|
||||||
|
EDJE_CC = @edje_cc@
|
||||||
|
EDJE_FLAGS = -id $(top_srcdir)/src/modules/$(MODULE)/images \
|
||||||
|
@EDJE_DEF@
|
||||||
|
|
||||||
|
e-module-$(MODULE).edj: e-module-$(MODULE).edc
|
||||||
|
$(EDJE_CC) $(EDJE_FLAGS) $< $@
|
||||||
|
|
||||||
|
# the module .so file
|
||||||
|
INCLUDES = -I. \
|
||||||
|
-I$(top_srcdir) \
|
||||||
|
-I$(top_srcdir)/src/modules/$(MODULE) \
|
||||||
|
-I$(top_srcdir)/src/bin \
|
||||||
|
-I$(top_builddir)/src/bin \
|
||||||
|
-I$(top_srcdir)/src/modules \
|
||||||
|
@e_cflags@
|
||||||
|
pkgdir = $(libdir)/enlightenment/modules/$(MODULE)/$(MODULE_ARCH)
|
||||||
|
pkg_LTLIBRARIES = module.la
|
||||||
|
module_la_SOURCES = e_mod_tiling.c \
|
||||||
|
e_mod_tiling.h \
|
||||||
|
e_mod_config.c
|
||||||
|
|
||||||
|
module_la_LIBADD = @e_libs@ @dlopen_libs@
|
||||||
|
module_la_LDFLAGS = -module -avoid-version
|
||||||
|
module_la_DEPENDENCIES = $(top_builddir)/config.h
|
||||||
|
|
||||||
|
uninstall:
|
||||||
|
rm -rf $(DESTDIR)$(libdir)/enlightenment/modules/$(MODULE)
|
|
@ -0,0 +1,18 @@
|
||||||
|
A tiling module for the Enlightenment Window Manager
|
||||||
|
|
||||||
|
Concept
|
||||||
|
=======
|
||||||
|
|
||||||
|
Each desktop can have from 1 to 8 (vertical) columns.
|
||||||
|
Windows are then resized and moved to use as much as columns as configured.
|
||||||
|
|
||||||
|
When there are more windows than possible columns, the remaining windows are
|
||||||
|
packed in the last column.
|
||||||
|
|
||||||
|
Resizing or moving a window will try to resize or move the column it is in.
|
||||||
|
|
||||||
|
What is needed?
|
||||||
|
===============
|
||||||
|
|
||||||
|
An up-to-date enlightenment environment.
|
||||||
|
…
|
|
@ -0,0 +1,12 @@
|
||||||
|
|
||||||
|
--- v1.0
|
||||||
|
[ ] Respect more ICCCM
|
||||||
|
[ ] Show how many columns are configured. (?)
|
||||||
|
[ ] Remove remaining bugs ☺.
|
||||||
|
|
||||||
|
--- v0.9
|
||||||
|
[X] Toggle between horizontal and vertical columns
|
||||||
|
[X] Handle correctly multiple screens
|
||||||
|
[X] Setting whether to display the window title
|
||||||
|
[X] Setting to choose hint keys
|
||||||
|
[X] Save original border and restore it when untiling
|
|
@ -0,0 +1,333 @@
|
||||||
|
#include "e_mod_tiling.h"
|
||||||
|
|
||||||
|
/* HACK: Needed to get subobjs of the widget. Is there a better way? */
|
||||||
|
typedef struct _E_Widget_Smart_Data E_Widget_Smart_Data;
|
||||||
|
|
||||||
|
struct _E_Widget_Smart_Data
|
||||||
|
{
|
||||||
|
Evas_Object *parent_obj;
|
||||||
|
Evas_Coord x, y, w, h;
|
||||||
|
Evas_Coord minw, minh;
|
||||||
|
Eina_List *subobjs;
|
||||||
|
};
|
||||||
|
|
||||||
|
/* Some defines to make coding with the e_widget_* easier for
|
||||||
|
* configuration panel */
|
||||||
|
#define RADIO(title, value, radiogroup) \
|
||||||
|
e_widget_radio_add(evas, _(title), value, radiogroup)
|
||||||
|
#define LIST_ADD(list, object) \
|
||||||
|
e_widget_list_object_append(list, object, 1, 1, 0.5)
|
||||||
|
|
||||||
|
struct _Config_vdesk *
|
||||||
|
get_vdesk(Eina_List *vdesks,
|
||||||
|
int x,
|
||||||
|
int y,
|
||||||
|
unsigned int zone_num)
|
||||||
|
{
|
||||||
|
for (Eina_List *l = vdesks; l; l = l->next) {
|
||||||
|
struct _Config_vdesk *vd = l->data;
|
||||||
|
|
||||||
|
if (!vd)
|
||||||
|
continue;
|
||||||
|
if (vd->nb_stacks < 0 || vd->nb_stacks > TILING_MAX_STACKS)
|
||||||
|
vd->nb_stacks = 0;
|
||||||
|
if (vd->x == x && vd->y == y && vd->zone_num == zone_num)
|
||||||
|
return vd;
|
||||||
|
}
|
||||||
|
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Fills the E_Config_Dialog-struct with the data currently in use
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
static void *
|
||||||
|
_create_data(E_Config_Dialog *cfd)
|
||||||
|
{
|
||||||
|
E_Config_Dialog_Data *cfdata = E_NEW(E_Config_Dialog_Data, 1);
|
||||||
|
|
||||||
|
/* Because we save a lot of lines here by using memcpy,
|
||||||
|
* the structs have to be ordered the same */
|
||||||
|
memcpy(cfdata, tiling_g.config, sizeof(Config));
|
||||||
|
cfdata->config.keyhints = strdup(tiling_g.config->keyhints);
|
||||||
|
|
||||||
|
/* Handle things which can't be easily memcpy'd */
|
||||||
|
cfdata->config.vdesks = NULL;
|
||||||
|
|
||||||
|
for (Eina_List *l = tiling_g.config->vdesks; l; l = l->next) {
|
||||||
|
struct _Config_vdesk *vd = l->data,
|
||||||
|
*newvd;
|
||||||
|
|
||||||
|
if (!vd)
|
||||||
|
continue;
|
||||||
|
|
||||||
|
newvd = E_NEW(struct _Config_vdesk, 1);
|
||||||
|
newvd->x = vd->x;
|
||||||
|
newvd->y = vd->y;
|
||||||
|
newvd->zone_num = vd->zone_num;
|
||||||
|
newvd->nb_stacks = vd->nb_stacks;
|
||||||
|
newvd->use_rows = vd->use_rows;
|
||||||
|
|
||||||
|
cfdata->config.vdesks = eina_list_append(cfdata->config.vdesks,
|
||||||
|
newvd);
|
||||||
|
}
|
||||||
|
|
||||||
|
return cfdata;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
_free_data(E_Config_Dialog *cfd,
|
||||||
|
E_Config_Dialog_Data *cfdata)
|
||||||
|
{
|
||||||
|
eina_list_free(cfdata->config.vdesks);
|
||||||
|
free(cfdata->config.keyhints);
|
||||||
|
free(cfdata);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
_fill_zone_config(E_Zone *zone,
|
||||||
|
E_Config_Dialog_Data *cfdata)
|
||||||
|
{
|
||||||
|
Evas *evas = cfdata->evas;
|
||||||
|
|
||||||
|
/* Clear old entries first */
|
||||||
|
evas_object_del(cfdata->o_desklist);
|
||||||
|
|
||||||
|
cfdata->o_desklist = e_widget_list_add(evas, 1, 0);
|
||||||
|
|
||||||
|
for (int i = 0; i < zone->desk_y_count * zone->desk_x_count; i++) {
|
||||||
|
E_Desk *desk = zone->desks[i];
|
||||||
|
struct _Config_vdesk *vd;
|
||||||
|
Evas_Object *list, *slider, *radio;
|
||||||
|
E_Radio_Group *rg;
|
||||||
|
|
||||||
|
if (!desk)
|
||||||
|
continue;
|
||||||
|
|
||||||
|
vd = get_vdesk(cfdata->config.vdesks, desk->x, desk->y, zone->num);
|
||||||
|
if (!vd) {
|
||||||
|
vd = E_NEW(struct _Config_vdesk, 1);
|
||||||
|
vd->x = desk->x;
|
||||||
|
vd->y = desk->y;
|
||||||
|
vd->zone_num = zone->num;
|
||||||
|
vd->nb_stacks = 0;
|
||||||
|
vd->use_rows = 0;
|
||||||
|
|
||||||
|
cfdata->config.vdesks = eina_list_append(cfdata->config.vdesks,
|
||||||
|
vd);
|
||||||
|
}
|
||||||
|
|
||||||
|
list = e_widget_list_add(evas, false, true);
|
||||||
|
|
||||||
|
LIST_ADD(list, e_widget_label_add(evas, desk->name));
|
||||||
|
slider = e_widget_slider_add(evas, 1, 0, _("%1.0f"),
|
||||||
|
0.0, 8.0, 1.0, 0, NULL,
|
||||||
|
&vd->nb_stacks, 150);
|
||||||
|
LIST_ADD(list, slider);
|
||||||
|
|
||||||
|
rg = e_widget_radio_group_new(&vd->use_rows);
|
||||||
|
radio = e_widget_radio_add(evas, _("columns"), 0, rg);
|
||||||
|
LIST_ADD(list, radio);
|
||||||
|
radio = e_widget_radio_add(evas, _("rows"), 1, rg);
|
||||||
|
LIST_ADD(list, radio);
|
||||||
|
|
||||||
|
LIST_ADD(cfdata->o_desklist, list);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Get the correct sizes of desklist and scrollframe */
|
||||||
|
LIST_ADD(cfdata->osf, cfdata->o_desklist);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
_cb_zone_change(void *data,
|
||||||
|
Evas_Object *obj)
|
||||||
|
{
|
||||||
|
int n;
|
||||||
|
E_Config_Dialog_Data *cfdata = data;
|
||||||
|
E_Zone *zone;
|
||||||
|
|
||||||
|
if (!cfdata || !cfdata->o_zonelist)
|
||||||
|
return;
|
||||||
|
|
||||||
|
n = e_widget_ilist_selected_get(cfdata->o_zonelist);
|
||||||
|
zone = e_widget_ilist_nth_data_get(cfdata->o_zonelist, n);
|
||||||
|
if (!zone)
|
||||||
|
return;
|
||||||
|
_fill_zone_config(zone, cfdata);
|
||||||
|
}
|
||||||
|
|
||||||
|
static Evas_Object *
|
||||||
|
_basic_create_widgets(E_Config_Dialog *cfd,
|
||||||
|
Evas *evas,
|
||||||
|
E_Config_Dialog_Data *cfdata)
|
||||||
|
{
|
||||||
|
Evas_Object *o, *oc, *of;
|
||||||
|
E_Container *con = e_container_current_get(e_manager_current_get());
|
||||||
|
E_Zone *zone;
|
||||||
|
|
||||||
|
o = e_widget_list_add(evas, 0, 0);
|
||||||
|
|
||||||
|
/* General settings */
|
||||||
|
of = e_widget_framelist_add(evas, _("General"), 0);
|
||||||
|
e_widget_framelist_object_append(of,
|
||||||
|
e_widget_check_add(evas, _("Tile dialog windows as well"),
|
||||||
|
&cfdata->config.tile_dialogs));
|
||||||
|
e_widget_framelist_object_append(of,
|
||||||
|
e_widget_check_add(evas, _("Show window titles"),
|
||||||
|
&cfdata->config.show_titles));
|
||||||
|
oc = e_widget_list_add(evas, false, true);
|
||||||
|
e_widget_list_object_append(oc,
|
||||||
|
e_widget_label_add(evas, _("Key hints")), 1, 0, 0.5);
|
||||||
|
e_widget_list_object_append(oc,
|
||||||
|
e_widget_entry_add(evas, &cfdata->config.keyhints, NULL, NULL, NULL),
|
||||||
|
1, 1, 0.5);
|
||||||
|
e_widget_framelist_object_append(of, oc);
|
||||||
|
|
||||||
|
LIST_ADD(o, of);
|
||||||
|
|
||||||
|
/* Virtual desktop settings */
|
||||||
|
of = e_widget_framelist_add(evas, _("Virtual Desktops"), 0);
|
||||||
|
e_widget_label_add(evas,
|
||||||
|
_("Number of columns used to tile per desk"
|
||||||
|
" (0 → tiling disabled):"));
|
||||||
|
cfdata->osf = e_widget_list_add(evas, 0, 1);
|
||||||
|
|
||||||
|
/* Zone list */
|
||||||
|
cfdata->o_zonelist = e_widget_ilist_add(evas, 0, 0, NULL);
|
||||||
|
e_widget_ilist_multi_select_set(cfdata->o_zonelist, false);
|
||||||
|
e_widget_size_min_set(cfdata->o_zonelist, 100, 100);
|
||||||
|
e_widget_on_change_hook_set(cfdata->o_zonelist, _cb_zone_change, cfdata);
|
||||||
|
for (Eina_List *l = con->zones; l; l = l->next) {
|
||||||
|
if (!(zone = l->data))
|
||||||
|
continue;
|
||||||
|
e_widget_ilist_append(cfdata->o_zonelist, NULL, zone->name, NULL, zone, NULL);
|
||||||
|
}
|
||||||
|
e_widget_ilist_go(cfdata->o_zonelist);
|
||||||
|
e_widget_ilist_thaw(cfdata->o_zonelist);
|
||||||
|
|
||||||
|
LIST_ADD(cfdata->osf, cfdata->o_zonelist);
|
||||||
|
|
||||||
|
/* List of individual tiling modes */
|
||||||
|
cfdata->evas = evas;
|
||||||
|
|
||||||
|
_fill_zone_config(con->zones->data, cfdata);
|
||||||
|
|
||||||
|
e_widget_ilist_selected_set(cfdata->o_zonelist, 0);
|
||||||
|
|
||||||
|
e_widget_framelist_object_append(of, cfdata->osf);
|
||||||
|
|
||||||
|
LIST_ADD(o, of);
|
||||||
|
|
||||||
|
return o;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int
|
||||||
|
_basic_apply_data(E_Config_Dialog *cfd,
|
||||||
|
E_Config_Dialog_Data *cfdata)
|
||||||
|
{
|
||||||
|
struct _Config_vdesk *vd;
|
||||||
|
|
||||||
|
tiling_g.config->tile_dialogs = cfdata->config.tile_dialogs;
|
||||||
|
tiling_g.config->show_titles = cfdata->config.show_titles;
|
||||||
|
if (strcmp(tiling_g.config->keyhints, cfdata->config.keyhints)) {
|
||||||
|
free(tiling_g.config->keyhints);
|
||||||
|
if (!cfdata->config.keyhints || !*cfdata->config.keyhints) {
|
||||||
|
tiling_g.config->keyhints = strdup(tiling_g.default_keyhints);
|
||||||
|
} else {
|
||||||
|
char *c = cfdata->config.keyhints;
|
||||||
|
int len = strlen(cfdata->config.keyhints);
|
||||||
|
|
||||||
|
/* Remove duplicates */
|
||||||
|
while (*c) {
|
||||||
|
char *f = c + 1;
|
||||||
|
|
||||||
|
while ((f = strchr(f, *c))) {
|
||||||
|
*f = cfdata->config.keyhints[--len];
|
||||||
|
cfdata->config.keyhints[len] = '\0';
|
||||||
|
}
|
||||||
|
c++;
|
||||||
|
}
|
||||||
|
tiling_g.config->keyhints = strdup(cfdata->config.keyhints);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Check if the layout for one of the vdesks has changed */
|
||||||
|
for (Eina_List *l = tiling_g.config->vdesks; l; l = l->next) {
|
||||||
|
struct _Config_vdesk *newvd;
|
||||||
|
|
||||||
|
vd = l->data;
|
||||||
|
|
||||||
|
if (!vd)
|
||||||
|
continue;
|
||||||
|
if (!(newvd = get_vdesk(cfdata->config.vdesks,
|
||||||
|
vd->x, vd->y, vd->zone_num))) {
|
||||||
|
change_desk_conf(vd);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (newvd->nb_stacks != vd->nb_stacks
|
||||||
|
|| newvd->use_rows != vd->use_rows) {
|
||||||
|
DBG("number of columns for (%d, %d, %d) changed from %d|%d"
|
||||||
|
" to %d|%d",
|
||||||
|
vd->x, vd->y, vd->zone_num,
|
||||||
|
vd->nb_stacks, vd->use_rows,
|
||||||
|
newvd->nb_stacks, newvd->use_rows);
|
||||||
|
change_desk_conf(newvd);
|
||||||
|
free(vd);
|
||||||
|
l->data = NULL;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
for (Eina_List *l = cfdata->config.vdesks; l; l = l->next) {
|
||||||
|
vd = l->data;
|
||||||
|
|
||||||
|
if (!vd)
|
||||||
|
continue;
|
||||||
|
if (!get_vdesk(tiling_g.config->vdesks,
|
||||||
|
vd->x, vd->y, vd->zone_num)) {
|
||||||
|
change_desk_conf(vd);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
EINA_LIST_FREE(tiling_g.config->vdesks, vd) {
|
||||||
|
free(vd);
|
||||||
|
}
|
||||||
|
|
||||||
|
tiling_g.config->vdesks = cfdata->config.vdesks;
|
||||||
|
cfdata->config.vdesks = NULL; /* we don't want this list to be freed */
|
||||||
|
|
||||||
|
e_tiling_update_conf();
|
||||||
|
|
||||||
|
e_config_save_queue();
|
||||||
|
|
||||||
|
return EINA_TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
E_Config_Dialog *
|
||||||
|
e_int_config_tiling_module(E_Container *con,
|
||||||
|
const char *params)
|
||||||
|
{
|
||||||
|
E_Config_Dialog *cfd;
|
||||||
|
E_Config_Dialog_View *v;
|
||||||
|
char buf[PATH_MAX];
|
||||||
|
|
||||||
|
if (e_config_dialog_find("E", "windows/tiling"))
|
||||||
|
return NULL;
|
||||||
|
|
||||||
|
v = E_NEW(E_Config_Dialog_View, 1);
|
||||||
|
|
||||||
|
v->create_cfdata = _create_data;
|
||||||
|
v->free_cfdata = _free_data;
|
||||||
|
v->basic.apply_cfdata = _basic_apply_data;
|
||||||
|
v->basic.create_widgets = _basic_create_widgets;
|
||||||
|
|
||||||
|
snprintf(buf, sizeof(buf), "%s/e-module-tiling.edj",
|
||||||
|
e_module_dir_get(tiling_g.module));
|
||||||
|
cfd = e_config_dialog_new(con,
|
||||||
|
_("Tiling Configuration"),
|
||||||
|
"E", "windows/tiling",
|
||||||
|
buf, 0, v, NULL);
|
||||||
|
return cfd;
|
||||||
|
}
|
|
@ -0,0 +1,97 @@
|
||||||
|
#ifndef E_MOD_TILING_H
|
||||||
|
#define E_MOD_TILING_H
|
||||||
|
|
||||||
|
#include <e.h>
|
||||||
|
#include <e_border.h>
|
||||||
|
#include <e_shelf.h>
|
||||||
|
|
||||||
|
#include <stdbool.h>
|
||||||
|
|
||||||
|
#include "config.h"
|
||||||
|
|
||||||
|
typedef struct _Config Config;
|
||||||
|
typedef struct _Tiling_Info Tiling_Info;
|
||||||
|
|
||||||
|
struct tiling_g
|
||||||
|
{
|
||||||
|
E_Module *module;
|
||||||
|
Config *config;
|
||||||
|
int log_domain;
|
||||||
|
const char *default_keyhints;
|
||||||
|
};
|
||||||
|
extern struct tiling_g tiling_g;
|
||||||
|
|
||||||
|
#define ERR(...) EINA_LOG_DOM_ERR(tiling_g.log_domain, __VA_ARGS__)
|
||||||
|
#define DBG(...) EINA_LOG_DOM_DBG(tiling_g.log_domain, __VA_ARGS__)
|
||||||
|
|
||||||
|
#define TILING_MAX_STACKS 8
|
||||||
|
|
||||||
|
struct _Config_vdesk
|
||||||
|
{
|
||||||
|
int x, y;
|
||||||
|
unsigned int zone_num;
|
||||||
|
int nb_stacks;
|
||||||
|
int use_rows;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct _Config
|
||||||
|
{
|
||||||
|
int tile_dialogs;
|
||||||
|
int show_titles;
|
||||||
|
char *keyhints;
|
||||||
|
Eina_List *vdesks;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct _Tiling_Info
|
||||||
|
{
|
||||||
|
/* The desk for which this _Tiling_Info is used. Needed because
|
||||||
|
* (for example) on e restart all desks are shown on all zones but no
|
||||||
|
* change events are triggered */
|
||||||
|
const E_Desk *desk;
|
||||||
|
|
||||||
|
struct _Config_vdesk *conf;
|
||||||
|
|
||||||
|
/* List of windows which were toggled floating */
|
||||||
|
Eina_List *floating_windows;
|
||||||
|
|
||||||
|
Eina_List *stacks[TILING_MAX_STACKS];
|
||||||
|
int pos[TILING_MAX_STACKS];
|
||||||
|
int size[TILING_MAX_STACKS];
|
||||||
|
};
|
||||||
|
|
||||||
|
struct _E_Config_Dialog_Data
|
||||||
|
{
|
||||||
|
struct _Config config;
|
||||||
|
Evas_Object *o_zonelist;
|
||||||
|
Evas_Object *o_desklist;
|
||||||
|
Evas_Object *osf;
|
||||||
|
Evas *evas;
|
||||||
|
};
|
||||||
|
|
||||||
|
E_Config_Dialog *e_int_config_tiling_module(E_Container *con,
|
||||||
|
const char *params);
|
||||||
|
|
||||||
|
EAPI extern E_Module_Api e_modapi;
|
||||||
|
|
||||||
|
EAPI void *e_modapi_init(E_Module *m);
|
||||||
|
EAPI int e_modapi_shutdown(E_Module *m);
|
||||||
|
EAPI int e_modapi_save(E_Module *m);
|
||||||
|
|
||||||
|
void change_desk_conf(struct _Config_vdesk *newconf);
|
||||||
|
|
||||||
|
void e_tiling_update_conf(void);
|
||||||
|
|
||||||
|
struct _Config_vdesk *
|
||||||
|
get_vdesk(Eina_List *vdesks,
|
||||||
|
int x,
|
||||||
|
int y,
|
||||||
|
unsigned int zone_num);
|
||||||
|
|
||||||
|
#define EINA_LIST_IS_IN(_list, _el) \
|
||||||
|
(eina_list_data_find(_list, _el) == _el)
|
||||||
|
#define EINA_LIST_APPEND(_list, _el) \
|
||||||
|
_list = eina_list_append(_list, _el)
|
||||||
|
#define EINA_LIST_REMOVE(_list, _el) \
|
||||||
|
_list = eina_list_remove(_list, _el)
|
||||||
|
|
||||||
|
#endif
|
After Width: | Height: | Size: 1.1 KiB |
After Width: | Height: | Size: 1.1 KiB |
After Width: | Height: | Size: 1.3 KiB |
After Width: | Height: | Size: 1.3 KiB |
After Width: | Height: | Size: 1.1 KiB |
After Width: | Height: | Size: 1.3 KiB |
After Width: | Height: | Size: 1.3 KiB |
After Width: | Height: | Size: 1.1 KiB |
After Width: | Height: | Size: 659 B |
|
@ -0,0 +1,10 @@
|
||||||
|
[Desktop Entry]
|
||||||
|
Type=Link
|
||||||
|
Name=Tiling
|
||||||
|
Name[fr]=E-pavage
|
||||||
|
Icon=e-module-tiling
|
||||||
|
Comment=Positions/resizes your windows tilingly.
|
||||||
|
Comment[fr]=Place/Redimensionne les fenêtres sans les superposer.
|
||||||
|
Comment[it]=Posiziona/ridimensiona le finestre affiancandole.
|
||||||
|
Comment[pt]=Posiciona/ajusta as janelas em mosaicos
|
||||||
|
X-Enlightenment-ModuleType=core
|