Add "active" and "primary" options to the <monitor> placement option for per-app settings (bug #5180)
This commit is contained in:
parent
a0d14c7d44
commit
c590a83207
3 changed files with 29 additions and 4 deletions
|
@ -111,6 +111,7 @@ ObAppSettings* config_create_app_settings(void)
|
|||
settings->type = -1;
|
||||
settings->decor = -1;
|
||||
settings->shade = -1;
|
||||
settings->monitor_type = 0;
|
||||
settings->monitor = -1;
|
||||
settings->focus = -1;
|
||||
settings->desktop = 0;
|
||||
|
@ -135,6 +136,7 @@ void config_app_settings_copy_non_defaults(const ObAppSettings *src,
|
|||
copy_if(type, (ObClientType)-1);
|
||||
copy_if(decor, -1);
|
||||
copy_if(shade, -1);
|
||||
copy_if(monitor_type, 0);
|
||||
copy_if(monitor, -1);
|
||||
copy_if(focus, -1);
|
||||
copy_if(desktop, 0);
|
||||
|
@ -200,8 +202,8 @@ void config_parse_gravity_coord(xmlNodePtr node, GravityCoord *c)
|
|||
|
||||
/* Manages settings for individual applications.
|
||||
Some notes: monitor is the screen number in a multi monitor
|
||||
(Xinerama) setup (starting from 0) or mouse, meaning the
|
||||
monitor the pointer is on. Default: mouse.
|
||||
(Xinerama) setup (starting from 0), or mouse: the monitor the pointer
|
||||
is on, active: the active monitor, primary: the primary monitor.
|
||||
Layer can be three values, above (Always on top), below
|
||||
(Always on bottom) and everything else (normal behaviour).
|
||||
Positions can be an integer value or center, which will
|
||||
|
@ -294,7 +296,14 @@ static void parse_per_app_settings(xmlNodePtr node, gpointer d)
|
|||
if (!obt_xml_node_contains(c, "default")) {
|
||||
gchar *s = obt_xml_node_string(c);
|
||||
if (!g_ascii_strcasecmp(s, "mouse"))
|
||||
settings->monitor = 0;
|
||||
settings->monitor_type =
|
||||
OB_APP_SETTINGS_MONITOR_MOUSE;
|
||||
else if (!g_ascii_strcasecmp(s, "active"))
|
||||
settings->monitor_type =
|
||||
OB_APP_SETTINGS_MONITOR_ACTIVE;
|
||||
else if (!g_ascii_strcasecmp(s, "primary"))
|
||||
settings->monitor_type =
|
||||
OB_APP_SETTINGS_MONITOR_PRIMARY;
|
||||
else
|
||||
settings->monitor = obt_xml_node_int(c);
|
||||
g_free(s);
|
||||
|
|
|
@ -33,6 +33,13 @@
|
|||
|
||||
typedef struct _ObAppSettings ObAppSettings;
|
||||
|
||||
typedef enum {
|
||||
OB_APP_SETTINGS_MONITOR_FIXED,
|
||||
OB_APP_SETTINGS_MONITOR_PRIMARY,
|
||||
OB_APP_SETTINGS_MONITOR_ACTIVE,
|
||||
OB_APP_SETTINGS_MONITOR_MOUSE
|
||||
} ObAppSettingsMonitor;
|
||||
|
||||
struct _ObAppSettings
|
||||
{
|
||||
GPatternSpec *class;
|
||||
|
@ -49,6 +56,7 @@ struct _ObAppSettings
|
|||
gint shade;
|
||||
gint decor;
|
||||
gint focus;
|
||||
ObAppSettingsMonitor monitor_type;
|
||||
gint monitor;
|
||||
gint iconic;
|
||||
gint skip_pager;
|
||||
|
|
|
@ -451,7 +451,15 @@ static gboolean place_per_app_setting(ObClient *client, gint *x, gint *y,
|
|||
ob_debug("placing by per-app settings");
|
||||
|
||||
/* Find which head the pointer is on */
|
||||
if (settings->monitor == 0) {
|
||||
if (settings->monitor_type == OB_APP_SETTINGS_MONITOR_PRIMARY) {
|
||||
guint m = screen_monitor_primary(TRUE);
|
||||
screen = screen_area(client->desktop, m, NULL);
|
||||
}
|
||||
else if (settings->monitor_type == OB_APP_SETTINGS_MONITOR_ACTIVE) {
|
||||
guint m = screen_monitor_active();
|
||||
screen = screen_area(client->desktop, m, NULL);
|
||||
}
|
||||
else if (settings->monitor_type == OB_APP_SETTINGS_MONITOR_MOUSE) {
|
||||
screen = pick_pointer_head(client);
|
||||
g_assert(screen);
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue