Introduce convertible module #49
|
@ -65,6 +65,7 @@ _is_device_a_touch_pointer(int dev_counter, int num_properties, char **iterator)
|
|||
}
|
||||
DBG("Looks like I found a device with calibration capabilities");
|
||||
is_correct_device = EINA_TRUE;
|
||||
free(result);
|
||||
}
|
||||
iterator++;
|
||||
}
|
||||
|
@ -101,6 +102,7 @@ _fetch_X_device_input_number(void)
|
|||
{
|
||||
dev_number = dev_counter;
|
||||
raster marked this conversation as resolved
Outdated
|
||||
DBG("Setting device: %d", dev_number);
|
||||
break;
|
||||
}
|
||||
iterator++;
|
||||
}
|
||||
|
@ -120,7 +122,18 @@ _fetch_and_rotate_screen(const char* randr_id, enum screen_rotation orientation)
|
|||
{
|
||||
DBG("Working on screen %s", randr_id);
|
||||
E_Randr2_Screen *rotatable_screen = e_randr2_screen_id_find(randr_id);
|
||||
if (rotatable_screen == NULL)
|
||||
{
|
||||
DBG("Failed to load screen for id %s", randr_id);
|
||||
return;
|
||||
}
|
||||
|
||||
E_Config_Randr2_Screen *screen_randr_cfg = e_randr2_config_screen_find(rotatable_screen, e_randr2_cfg);
|
||||
if (screen_randr_cfg == NULL)
|
||||
{
|
||||
DBG("Failed to load screen configuration for id %s", randr_id);
|
||||
return;
|
||||
}
|
||||
int rotation = _convertible_rotation_get(orientation);
|
||||
DBG("Screen %s is going to be rotated to %d", randr_id, rotation);
|
||||
|
||||
|
@ -165,6 +178,7 @@ _fetch_and_rotate_screen(const char* randr_id, enum screen_rotation orientation)
|
|||
} else {
|
||||
ERR("Unable to fetch coordinates transformation matrix for device %d", x_dev_num);
|
||||
}
|
||||
free(result);
|
||||
free(matrix);
|
||||
}
|
||||
}
|
||||
|
@ -173,7 +187,7 @@ _fetch_and_rotate_screen(const char* randr_id, enum screen_rotation orientation)
|
|||
* Helper to get the interface
|
||||
* */
|
||||
static Eldbus_Proxy *
|
||||
get_dbus_interface(const char *IFACE)
|
||||
_get_dbus_interface(const char *IFACE)
|
||||
{
|
||||
DBG("Working on interface: %s", IFACE);
|
||||
Eldbus_Connection *conn;
|
||||
|
@ -228,16 +242,19 @@ _access_bool_property(const Eldbus_Message *msg, Eldbus_Message_Iter **variant,
|
|||
return res;
|
||||
}
|
||||
|
||||
if (type[0] != 'b')
|
||||
{
|
||||
WARN("Expected type is int.");
|
||||
res = EINA_FALSE;
|
||||
free(type);
|
||||
return res;
|
||||
}
|
||||
if (type[1])
|
||||
{
|
||||
WARN("It is a complex type, not handle yet.");
|
||||
res = EINA_FALSE;
|
||||
}
|
||||
if (type[0] != 'b')
|
||||
{
|
||||
WARN("Expected type is int.");
|
||||
res = EINA_FALSE;
|
||||
}
|
||||
|
||||
if (!eldbus_message_iter_arguments_get((*variant), "b", boolean_property_value))
|
||||
{
|
||||
WARN("error in eldbus_message_iter_arguments_get()");
|
||||
|
@ -379,16 +396,13 @@ sensor_proxy_shutdown(void)
|
|||
eldbus_shutdown();
|
||||
}
|
||||
|
||||
int
|
||||
_convertible_rotation_get(const enum screen_rotation orientation);
|
||||
|
||||
/**
|
||||
* Helper function to extract ta string property from the message
|
||||
* @param msg The message coming from the get property invocation
|
||||
* @param variant
|
||||
* @return Enum specifying the orientation. UNDEFINED by default
|
||||
*/
|
||||
enum screen_rotation
|
||||
static enum screen_rotation
|
||||
_access_string_property(const Eldbus_Message *msg, Eldbus_Message_Iter **variant)
|
||||
{
|
||||
enum screen_rotation rotation = UNDEFINED;
|
||||
|
@ -404,34 +418,33 @@ _access_string_property(const Eldbus_Message *msg, Eldbus_Message_Iter **variant
|
|||
WARN("Unable to get the type.");
|
||||
return rotation;
|
||||
}
|
||||
|
||||
type = eldbus_message_iter_signature_get((*variant));
|
||||
if (type[0] != 's')
|
||||
{
|
||||
WARN("Expected type is string(s).");
|
||||
free(type);
|
||||
return rotation;
|
||||
}
|
||||
if (type[1])
|
||||
{
|
||||
WARN("It is a complex type, not handle yet.");
|
||||
}
|
||||
if (type[0] != 's')
|
||||
{
|
||||
WARN("Expected type is string(s).");
|
||||
}
|
||||
const char **string_property_value = calloc(PATH_MAX, sizeof(char));
|
||||
EINA_SAFETY_ON_NULL_RETURN_VAL(string_property_value, EINA_FALSE);
|
||||
if (!eldbus_message_iter_arguments_get((*variant), "s", string_property_value))
|
||||
|
||||
const char *string_property_value;
|
||||
if (!eldbus_message_iter_arguments_get(variant, "s", &string_property_value))
|
||||
{
|
||||
WARN("error in eldbus_message_iter_arguments_get()");
|
||||
}
|
||||
|
||||
if (!strcmp(ACCELEROMETER_ORIENTATION_RIGHT, *string_property_value))
|
||||
if (strcmp(ACCELEROMETER_ORIENTATION_RIGHT, string_property_value) == 0)
|
||||
rotation = RIGHT_UP;
|
||||
if (!strcmp(ACCELEROMETER_ORIENTATION_LEFT, *string_property_value))
|
||||
if (strcmp(ACCELEROMETER_ORIENTATION_LEFT, string_property_value) == 0)
|
||||
rotation = LEFT_UP;
|
||||
if (!strcmp(ACCELEROMETER_ORIENTATION_BOTTOM, *string_property_value))
|
||||
if (strcmp(ACCELEROMETER_ORIENTATION_BOTTOM, string_property_value) == 0)
|
||||
raster
commented
youy know you don't have to cast to/from void * right... ? everything auto-casts to/from void * ... :) youy know you don't have to cast to/from void * right... ? everything auto-casts to/from void * ... :)
|
||||
rotation = FLIPPED;
|
||||
if (!strcmp(ACCELEROMETER_ORIENTATION_NORMAL, *string_property_value))
|
||||
if (strcmp(ACCELEROMETER_ORIENTATION_NORMAL, string_property_value) == 0)
|
||||
rotation = NORMAL;
|
||||
|
||||
free(type);
|
||||
free(string_property_value);
|
||||
return rotation;
|
||||
}
|
||||
|
||||
|
@ -439,7 +452,7 @@ void
|
|||
on_accelerometer_orientation(void *data, const Eldbus_Message *msg, Eldbus_Pending *pending EINA_UNUSED)
|
||||
{
|
||||
INF("New orientation received");
|
||||
Instance *inst = (Instance *) data;
|
||||
Instance *inst = data;
|
||||
|
||||
if (inst->locked_position == EINA_TRUE)
|
||||
{
|
||||
|
@ -447,7 +460,6 @@ on_accelerometer_orientation(void *data, const Eldbus_Message *msg, Eldbus_Pendi
|
|||
return;
|
||||
}
|
||||
|
||||
|
||||
const char *errname, *errmsg;
|
||||
enum screen_rotation orientation;
|
||||
Eldbus_Message_Iter *variant = NULL;
|
||||
|
|
|
@ -26,11 +26,13 @@ struct _DbusAccelerometer
|
|||
/**
|
||||
* Fetch the DBUS interfaces and fill the DbusAccelerometer struct
|
||||
* */
|
||||
DbusAccelerometer* sensor_proxy_init(void);
|
||||
DbusAccelerometer* sensor_proxy_init();
|
||||
rafspiny marked this conversation as resolved
Outdated
raster
commented
func() in c means zero OR more arguments - unknown. (void) means no arguments at all. different to c++ and other langs. func() in c means zero OR more arguments - unknown. (void) means no arguments at all. different to c++ and other langs.
rafspiny
commented
Done Done
|
||||
|
||||
|
||||
void sensor_proxy_shutdown();
|
||||
rafspiny marked this conversation as resolved
Outdated
raster
commented
func() in c means zero OR more arguments - unknown. (void) means no arguments at all. different to c++ and other langs. func() in c means zero OR more arguments - unknown. (void) means no arguments at all. different to c++ and other langs.
rafspiny
commented
Done Done
|
||||
|
||||
void
|
||||
sensor_proxy_shutdown(void);
|
||||
on_has_accelerometer(void *data EINA_UNUSED, const Eldbus_Message *msg, Eldbus_Pending *pending EINA_UNUSED);
|
||||
|
||||
/**
|
||||
* Callback definition to handle the request of the accelerometer property of DBUS interface net.hadess.SensorProxy
|
||||
|
|
|
@ -12,7 +12,7 @@ static void
|
|||
_update_instances(const Instance *current_instance)
|
||||
{
|
||||
Eina_List *l;
|
||||
Instance *instance = NULL;
|
||||
Instance *instance;
|
||||
raster
commented
you know you dont have to set instance to NULL... :) you know you dont have to set instance to NULL... :)
|
||||
EINA_LIST_FOREACH(instances, l, instance)
|
||||
{
|
||||
if (current_instance != instance)
|
||||
|
|
|
@ -17,9 +17,8 @@ E_Module *convertible_module;
|
|||
Instance *inst;
|
||||
|
||||
// Configuration
|
||||
extern Convertible_Config *convertible_config = NULL;
|
||||
static E_Config_DD *conf_edd = NULL;
|
||||
Convertible_Config *conf = NULL;
|
||||
extern Convertible_Config *convertible_config;
|
||||
extern E_Config_DD *edd;
|
||||
|
||||
// Logger
|
||||
int _convertible_log_dom;
|
||||
|
@ -35,9 +34,6 @@ E_API E_Module_Api e_modapi =
|
|||
/* LIST OF INSTANCES */
|
||||
static Eina_List *instances = NULL;
|
||||
|
||||
/* Other functions for configuration */
|
||||
static void _conf_new(void);
|
||||
static void _conf_free(void);
|
||||
|
||||
/* gadcon requirements */
|
||||
static E_Gadcon_Client *_gc_init(E_Gadcon *gc, const char *name, const char *id, const char *style);
|
||||
|
@ -124,10 +120,10 @@ static void
|
|||
_gc_orient(E_Gadcon_Client *gcc, E_Gadcon_Orient orient)
|
||||
{
|
||||
Evas_Coord mw, mh;
|
||||
char buf[4096];
|
||||
char buf[PATH_MAX];
|
||||
const char *s = "float";
|
||||
|
||||
Instance *instance = gcc->data;
|
||||
Instance *current_instance = gcc->data;
|
||||
switch (orient)
|
||||
{
|
||||
case E_GADCON_ORIENT_FLOAT:
|
||||
|
@ -194,13 +190,13 @@ _gc_orient(E_Gadcon_Client *gcc, E_Gadcon_Orient orient)
|
|||
break;
|
||||
}
|
||||
snprintf(buf, sizeof(buf), "e,state,orientation,%s", s);
|
||||
edje_object_signal_emit(instance->o_button, buf, "e");
|
||||
edje_object_message_signal_process(instance->o_button);
|
||||
edje_object_signal_emit(current_instance->o_button, buf, "e");
|
||||
edje_object_message_signal_process(current_instance->o_button);
|
||||
|
||||
mw = 0, mh = 0;
|
||||
edje_object_size_min_get(instance->o_button, &mw, &mh);
|
||||
edje_object_size_min_get(current_instance->o_button, &mw, &mh);
|
||||
if ((mw < 1) || (mh < 1))
|
||||
edje_object_size_min_calc(instance->o_button, &mw, &mh);
|
||||
edje_object_size_min_calc(current_instance->o_button, &mw, &mh);
|
||||
if (mw < 4) mw = 4;
|
||||
if (mh < 4) mh = 4;
|
||||
e_gadcon_client_aspect_set(gcc, mw, mh);
|
||||
|
@ -228,7 +224,7 @@ _gc_icon(const E_Gadcon_Client_Class *client_class EINA_UNUSED, Evas *evas)
|
|||
static const char *
|
||||
_gc_id_new(const E_Gadcon_Client_Class *client_class EINA_UNUSED)
|
||||
{
|
||||
static char buf[4096];
|
||||
static char buf[PATH_MAX];
|
||||
|
||||
snprintf(buf, sizeof(buf), "%s.%d", client_class->name,
|
||||
eina_list_count(instances) + 1);
|
||||
|
@ -242,16 +238,16 @@ _gc_id_new(const E_Gadcon_Client_Class *client_class EINA_UNUSED)
|
|||
static void
|
||||
_cb_properties_changed(void *data, const Eldbus_Message *msg)
|
||||
{
|
||||
Instance *instance = (Instance *) data;
|
||||
Instance *current_instance = data;
|
||||
Eldbus_Message_Iter *array, *invalidate;
|
||||
char *iface;
|
||||
|
||||
if (!eldbus_message_arguments_get(msg, "sa{sv}as", &iface, &array, &invalidate))
|
||||
ERR("Error getting data from properties changed signal.");
|
||||
// Given that the property changed, let's get the new value
|
||||
Eldbus_Pending *pending_operation = eldbus_proxy_property_get(instance->accelerometer->sensor_proxy,
|
||||
Eldbus_Pending *pending_operation = eldbus_proxy_property_get(current_instance->accelerometer->sensor_proxy,
|
||||
"AccelerometerOrientation",
|
||||
on_accelerometer_orientation, instance);
|
||||
on_accelerometer_orientation, current_instance);
|
||||
if (!pending_operation)
|
||||
ERR("Error: could not get property AccelerometerOrientation");
|
||||
}
|
||||
|
@ -305,14 +301,15 @@ e_modapi_init(E_Module *m)
|
|||
E_Randr2_Screen *screen = e_randr2_screen_id_find(zone->randr2_id);
|
||||
DBG("name randr2 id %s", zone->randr2_id);
|
||||
DBG("rot_90 %i", screen->info.can_rot_90);
|
||||
|
||||
// Arbitrarily chosen a condition to check that rotation is enabled
|
||||
if (screen->info.can_rot_90 == EINA_TRUE)
|
||||
{
|
||||
char *randr2_id = strdup(zone->randr2_id);
|
||||
if (randr2_id == NULL)
|
||||
ERR("Can't copy the screen name");
|
||||
raster marked this conversation as resolved
Outdated
raster
commented
why al of the above? why not just strdup? :) why al of the above? why not just strdup? :)
rafspiny
commented
I thing I tried 2 years ago and got some weird issue. Re-introducing it. I thing I tried 2 years ago and got some weird issue. Re-introducing it.
|
||||
|
||||
inst->randr2_ids = eina_list_append(inst->randr2_ids, randr2_id);
|
||||
else
|
||||
inst->randr2_ids = eina_list_append(inst->randr2_ids, randr2_id);
|
||||
if (eina_error_get())
|
||||
ERR("Memory is low. List allocation failed.");
|
||||
}
|
||||
|
@ -326,12 +323,10 @@ e_modapi_init(E_Module *m)
|
|||
e_gadcon_provider_register(&_gadcon_class);
|
||||
|
||||
INF("Creating menu entries for settings");
|
||||
/* create Screen configuration category
|
||||
*
|
||||
* NB: If the category already exists, this function just returns */
|
||||
e_configure_registry_category_add("screen", 30, _("Screen"), NULL, "preferences-desktop-display");
|
||||
e_configure_registry_item_add("screen/convertible", 30, "convertible", NULL,
|
||||
theme_overlay_path, e_int_config_convertible_module);
|
||||
e_configure_registry_category_add("extensions", 90, "Extensions", NULL,
|
||||
"preferences-extensions");
|
||||
e_configure_registry_item_add("extensions/convertible", 30, "convertible", NULL,
|
||||
"preferences-desktop-convertible", e_int_config_convertible_module);
|
||||
|
||||
instances = eina_list_append(instances, inst);
|
||||
|
||||
|
@ -373,15 +368,7 @@ e_modapi_save(E_Module *m EINA_UNUSED)
|
|||
{
|
||||
if (convertible_config)
|
||||
{
|
||||
e_config_domain_save("module.convertible", conf_edd, convertible_config);
|
||||
e_config_domain_save("module.convertible", edd, convertible_config);
|
||||
}
|
||||
return 1;
|
||||
}
|
||||
|
||||
static void
|
||||
_conf_new(void)
|
||||
{
|
||||
conf = E_NEW(Convertible_Config, 1);
|
||||
conf->disable_keyboard_on_rotation = 1;
|
||||
e_config_save_queue();
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue
Any reason ytou keep looping and don't just break the loop here?