all repos — openbox @ 35ed95fe18e9b8d7a79f79f4fd7466a2b46435e3

openbox fork - make it a bit more like ryudo

move the resistance plugin into the kernel. dont resist when move/resizing with the keyboard, only when doing it with the mouse.
Dana Jansens danakj@orodu.net
commit

35ed95fe18e9b8d7a79f79f4fd7466a2b46435e3

parent

950b85b9880012ed45b81854b5b5865b1de08a87

M Makefile.amMakefile.am

@@ -26,7 +26,6 @@ kernel/openbox \

tools/kdetrayproxy/kdetrayproxy plugin_LTLIBRARIES = \ - plugins/resistance/resistance.la \ plugins/placement/placement.la \ plugins/menu/timed_menu.la \ plugins/menu/fifo_menu.la \

@@ -36,9 +35,6 @@

if OBCONF bin_PROGRAMS += \ tools/obconf/obconf - -#plugin_LTLIBRARIES += \ -# plugins/resistance/resistance-config.la endif ## render ##

@@ -176,6 +172,8 @@ kernel/popup.c \

kernel/popup.h \ kernel/prop.c \ kernel/prop.h \ + kernel/resist.c \ + kernel/resist.h \ kernel/screen.c \ kernel/screen.h \ kernel/session.c \

@@ -193,39 +191,6 @@ kernel/window.h \

kernel/xerror.c \ kernel/xerror.h \ plugins/interface.h - -## plugins/resistance ## - -plugins_resistance_resistance_la_CPPFLAGS = \ - $(XFT_CFLAGS) \ - $(GLIB_CFLAGS) \ - $(LIBSN_CFLAGS) \ - $(XML_CFLAGS) \ - -DPLUGINDIR=\"$(plugindir)\" \ - -DG_LOG_DOMAIN=\"Plugin-Resistance\" -plugins_resistance_resistance_la_LDFLAGS = \ - -module \ - -avoid-version -plugins_resistance_resistance_la_SOURCES = \ - plugins/resistance/resistance.c \ - plugins/resistance/resistance.h - -if OBCONF -plugins_resistance_resistance_config_la_CPPFLAGS = \ - $(XFT_CFLAGS) \ - $(GLIB_CFLAGS) \ - $(LIBSN_CFLAGS) \ - $(XML_CFLAGS) \ - -DPLUGINDIR=\"$(plugindir)\" \ - -DG_LOG_DOMAIN=\"Plugin-Resistance\" \ - $(GTK_CFLAGS) \ - $(GLADE_CFLAGS) -plugins_resistance_resistance_config_la_LDFLAGS = \ - -module \ - -avoid-version -plugins_resistance_resistance_config_la_SOURCES = \ - plugins/resistance/resistance_config.c -endif ## plugins/placement ##
M openbox/config.copenbox/config.c

@@ -38,6 +38,9 @@ gint config_mouse_dclicktime;

gchar *config_menu_path; +gint config_resist_win; +gint config_resist_edge; + gchar *expand_tilde(const gchar *f) { if (!f)

@@ -348,6 +351,18 @@ g_free(c);

} } +static void parse_resistance(ObParseInst *i, xmlDocPtr doc, xmlNodePtr node, + void *d) +{ + xmlNodePtr n; + + node = node->xmlChildrenNode; + if ((n = parse_find_node("strength", node))) + config_resist_win = parse_int(doc, n); + if ((n = parse_find_node("screen_edge_strength", node))) + config_resist_edge = parse_int(doc, n); +} + void config_startup(ObParseInst *i) { config_focus_new = TRUE;

@@ -394,6 +409,11 @@ config_mouse_threshold = 3;

config_mouse_dclicktime = 200; parse_register(i, "mouse", parse_mouse, NULL); + + config_resist_win = 10; + config_resist_edge = 10; + + parse_register(i, "resistance", parse_resistance, NULL); config_menu_path = NULL;
M openbox/config.hopenbox/config.h

@@ -67,6 +67,11 @@ /*! Number of milliseconds within which 2 clicks must occur to be a

double-click */ extern gint config_mouse_dclicktime; +/*! Number of pixels to resist while crossing another window's edge */ +gint config_resist_win; +/*! Number of pixels to resist while crossing a screen's edge */ +gint config_resist_edge; + /*! User-specified path to the menu file */ extern gchar *config_menu_path;
M openbox/moveresize.copenbox/moveresize.c

@@ -6,6 +6,7 @@ #include "client.h"

#include "frame.h" #include "dispatch.h" #include "openbox.h" +#include "resist.h" #include "popup.h" #include "config.h" #include "render/render.h"

@@ -72,12 +73,8 @@ start_cw = c->area.width;

start_ch = c->area.height; start_x = x; start_y = y; - if (corner == prop_atoms.net_wm_moveresize_move_keyboard || - corner == prop_atoms.net_wm_moveresize_size_keyboard) - button = 0; /* mouse can't end it without being pressed first */ - else - button = b; corner = cnr; + button = b; if (corner == prop_atoms.net_wm_moveresize_move || corner == prop_atoms.net_wm_moveresize_move_keyboard) {

@@ -145,9 +142,12 @@ moveresize_in_progress = FALSE;

moveresize_client = NULL; } -static void do_move() +static void do_move(gboolean resist) { Rect *a; + + if (resist) + resist_move(moveresize_client, &cur_x, &cur_y); dispatch_move(moveresize_client, &cur_x, &cur_y);

@@ -164,13 +164,16 @@ moveresize_client->frame->area.x - a->x,

moveresize_client->frame->area.y - a->y); } -static void do_resize() +static void do_resize(gboolean resist) { /* dispatch_resize needs the frame size */ cur_x += moveresize_client->frame->size.left + moveresize_client->frame->size.right; cur_y += moveresize_client->frame->size.top + moveresize_client->frame->size.bottom; + + if (resist) + resist_size(moveresize_client, &cur_x, &cur_y, lockcorner); dispatch_resize(moveresize_client, &cur_x, &cur_y, lockcorner);

@@ -207,7 +210,7 @@ } else if (e->type == MotionNotify) {

if (moving) { cur_x = start_cx + e->xmotion.x_root - start_x; cur_y = start_cy + e->xmotion.y_root - start_y; - do_move(); + do_move(TRUE); } else { if (corner == prop_atoms.net_wm_moveresize_size_topleft) { cur_x = start_cw - (e->xmotion.x_root - start_x);

@@ -250,7 +253,7 @@ lockcorner = OB_CORNER_TOPLEFT;

} else g_assert_not_reached(); - do_resize(); + do_resize(TRUE); } } else if (e->type == KeyPress) { if (e->xkey.keycode == ob_keycode(OB_KEY_ESCAPE))

@@ -269,7 +272,7 @@ else if (e->xkey.keycode == ob_keycode(OB_KEY_UP))

cur_y -= MAX(4, moveresize_client->size_inc.height); else return; - do_resize(); + do_resize(FALSE); } else if (corner == prop_atoms.net_wm_moveresize_move_keyboard) { if (e->xkey.keycode == ob_keycode(OB_KEY_RIGHT)) cur_x += 4;

@@ -281,7 +284,7 @@ else if (e->xkey.keycode == ob_keycode(OB_KEY_UP))

cur_y -= 4; else return; - do_move(); + do_move(FALSE); } } }
M openbox/plugin.copenbox/plugin.c

@@ -158,7 +158,6 @@

if (io == NULL) { /* load the default plugins */ plugin_open("placement", i); - plugin_open("resistance", i); /* XXX rm me when the parser loads me magically */ plugin_open("client_menu", i);
A openbox/resist.h

@@ -0,0 +1,11 @@

+#ifndef ob__resist_h +#define ob__resist_h + +struct _ObClient; + +#include <glib.h> + +void resist_move(struct _ObClient *c, gint *x, gint *y); +void resist_size(struct _ObClient *c, gint *w, gint *h, ObCorner corn); + +#endif
D plugins/resistance/.cvsignore

@@ -1,7 +0,0 @@

-.deps -.libs -resistance-config.la -resistance.la -.dirstamp -plugins_resistance_resistance_la-resistance.lo -plugins_resistance_resistance_config_la-resistance_config.lo
D plugins/resistance/Makefile

@@ -1,4 +0,0 @@

-all clean install: - $(MAKE) -C ../.. -$(MAKEFLAGS) $@ - -.PHONY: all clean install
M plugins/resistance/resistance.copenbox/resist.c

@@ -1,42 +1,22 @@

-#include "kernel/dispatch.h" -#include "kernel/client.h" -#include "kernel/frame.h" -#include "kernel/stacking.h" -#include "kernel/screen.h" +#include "dispatch.h" +#include "client.h" +#include "frame.h" +#include "stacking.h" +#include "screen.h" +#include "config.h" #include "parser/parse.h" -#include "resistance.h" -#include <glib.h> -static int win_resistance; -static int edge_resistance; - -static void parse_xml(ObParseInst *i, xmlDocPtr doc, xmlNodePtr node, void *d) -{ - xmlNodePtr n; - - node = node->xmlChildrenNode; - if ((n = parse_find_node("strength", node))) - win_resistance = parse_int(doc, n); - if ((n = parse_find_node("screen_edge_strength", node))) - edge_resistance = parse_int(doc, n); -} - -void plugin_setup_config(ObParseInst *i) -{ - win_resistance = edge_resistance = DEFAULT_RESISTANCE; - - parse_register(i, "resistance", parse_xml, NULL); -} +#include <glib.h> -static void resist_move(ObClient *c, int *x, int *y) +void resist_move(ObClient *c, gint *x, gint *y) { GList *it; Rect *area; guint i; - int l, t, r, b; /* requested edges */ - int al, at, ar, ab; /* screen area edges */ - int cl, ct, cr, cb; /* current edges */ - int w, h; /* current size */ + gint l, t, r, b; /* requested edges */ + gint al, at, ar, ab; /* screen area edges */ + gint cl, ct, cr, cb; /* current edges */ + gint w, h; /* current size */ ObClient *snapx = NULL, *snapy = NULL; w = c->frame->area.width;

@@ -53,7 +33,7 @@ cr = cl + c->frame->area.width - 1;

cb = ct + c->frame->area.height - 1; /* snap to other clients */ - if (win_resistance) + if (config_resist_win) for (it = stacking_list; it != NULL; it = it->next) { ObClient *target; int tl, tt, tr, tb; /* 1 past the target's edges on each side */

@@ -75,30 +55,36 @@ bottom-to-top in the stacking list

*/ if (snapx == NULL) { if (ct < tb && cb > tt) { - if (cl >= tr && l < tr && l >= tr - win_resistance) + if (cl >= tr && l < tr && l >= tr - config_resist_win) *x = tr, snapx = target; - else if (cr <= tl && r > tl && r <= tl + win_resistance) + else if (cr <= tl && r > tl && + r <= tl + config_resist_win) *x = tl - w + 1, snapx = target; if (snapx != NULL) { /* try to corner snap to the window */ - if (ct > tt && t <= tt && t > tt - win_resistance) + if (ct > tt && t <= tt && + t > tt - config_resist_win) *y = tt + 1, snapy = target; - else if (cb < tb && b >= tb && b < tb + win_resistance) + else if (cb < tb && b >= tb && + b < tb + config_resist_win) *y = tb - h, snapy = target; } } } if (snapy == NULL) { if (cl < tr && cr > tl) { - if (ct >= tb && t < tb && t >= tb - win_resistance) + if (ct >= tb && t < tb && t >= tb - config_resist_win) *y = tb, snapy = target; - else if (cb <= tt && b > tt && b <= tt + win_resistance) + else if (cb <= tt && b > tt && + b <= tt + config_resist_win) *y = tt - h + 1, snapy = target; if (snapy != NULL) { /* try to corner snap to the window */ - if (cl > tl && l <= tl && l > tl - win_resistance) + if (cl > tl && l <= tl && + l > tl - config_resist_win) *x = tl + 1, snapx = target; - else if (cr < tr && r >= tr && r < tr + win_resistance) + else if (cr < tr && r >= tr && + r < tr + config_resist_win) *x = tr - w, snapx = target; } }

@@ -108,7 +94,7 @@ if (snapx && snapy) break;

} /* get the screen boundaries */ - if (edge_resistance) { + if (config_resist_edge) { for (i = 0; i < screen_num_monitors; ++i) { area = screen_area_monitor(c->desktop, i);

@@ -121,27 +107,27 @@ ar = al + area->width - 1;

ab = at + area->height - 1; /* snap to screen edges */ - if (cl >= al && l < al && l >= al - edge_resistance) + if (cl >= al && l < al && l >= al - config_resist_edge) *x = al; - else if (cr <= ar && r > ar && r <= ar + edge_resistance) + else if (cr <= ar && r > ar && r <= ar + config_resist_edge) *x = ar - w + 1; - if (ct >= at && t < at && t >= at - edge_resistance) + if (ct >= at && t < at && t >= at - config_resist_edge) *y = at; - else if (cb <= ab && b > ab && b < ab + edge_resistance) + else if (cb <= ab && b > ab && b < ab + config_resist_edge) *y = ab - h + 1; } } } -static void resist_size(ObClient *c, int *w, int *h, ObCorner corn) +void resist_size(ObClient *c, gint *w, gint *h, ObCorner corn) { GList *it; ObClient *target; /* target */ - int l, t, r, b; /* my left, top, right and bottom sides */ - int dlt, drb; /* my destination left/top and right/bottom sides */ - int tl, tt, tr, tb; /* target's left, top, right and bottom bottom sides */ + gint l, t, r, b; /* my left, top, right and bottom sides */ + gint dlt, drb; /* my destination left/top and right/bottom sides */ + gint tl, tt, tr, tb; /* target's left, top, right and bottom bottom sides*/ Rect *area; - int al, at, ar, ab; /* screen boundaries */ + gint al, at, ar, ab; /* screen boundaries */ ObClient *snapx = NULL, *snapy = NULL; /* don't snap windows with size increments */

@@ -161,7 +147,7 @@ ar = al + area->width - 1;

ab = at + area->height - 1; /* snap to other windows */ - if (win_resistance) { + if (config_resist_win) { for (it = stacking_list; it != NULL; it = it->next) { if (!WINDOW_IS_CLIENT(it->data)) continue;

@@ -183,14 +169,16 @@ case OB_CORNER_TOPLEFT:

case OB_CORNER_BOTTOMLEFT: dlt = l; drb = r + *w - c->frame->area.width; - if (r < tl && drb >= tl && drb < tl + win_resistance) + if (r < tl && drb >= tl && + drb < tl + config_resist_win) *w = tl - l, snapx = target; break; case OB_CORNER_TOPRIGHT: case OB_CORNER_BOTTOMRIGHT: dlt = l - *w + c->frame->area.width; drb = r; - if (l > tr && dlt <= tr && dlt > tr - win_resistance) + if (l > tr && dlt <= tr && + dlt > tr - config_resist_win) *w = r - tr, snapx = target; break; }

@@ -205,14 +193,16 @@ case OB_CORNER_TOPLEFT:

case OB_CORNER_TOPRIGHT: dlt = t; drb = b + *h - c->frame->area.height; - if (b < tt && drb >= tt && drb < tt + win_resistance) + if (b < tt && drb >= tt && + drb < tt + config_resist_win) *h = tt - t, snapy = target; break; case OB_CORNER_BOTTOMLEFT: case OB_CORNER_BOTTOMRIGHT: dlt = t - *h + c->frame->area.height; drb = b; - if (t > tb && dlt <= tb && dlt > tb - win_resistance) + if (t > tb && dlt <= tb && + dlt > tb - config_resist_win) *h = b - tb, snapy = target; break; }

@@ -226,21 +216,21 @@ }

/* snap to screen edges */ - if (edge_resistance) { + if (config_resist_edge) { /* horizontal snapping */ switch (corn) { case OB_CORNER_TOPLEFT: case OB_CORNER_BOTTOMLEFT: dlt = l; drb = r + *w - c->frame->area.width; - if (r <= ar && drb > ar && drb <= ar + edge_resistance) + if (r <= ar && drb > ar && drb <= ar + config_resist_edge) *w = ar - l + 1; break; case OB_CORNER_TOPRIGHT: case OB_CORNER_BOTTOMRIGHT: dlt = l - *w + c->frame->area.width; drb = r; - if (l >= al && dlt < al && dlt >= al - edge_resistance) + if (l >= al && dlt < al && dlt >= al - config_resist_edge) *w = r - al + 1; break; }

@@ -251,36 +241,16 @@ case OB_CORNER_TOPLEFT:

case OB_CORNER_TOPRIGHT: dlt = t; drb = b + *h - c->frame->area.height; - if (b <= ab && drb > ab && drb <= ab + edge_resistance) + if (b <= ab && drb > ab && drb <= ab + config_resist_edge) *h = ab - t + 1; break; case OB_CORNER_BOTTOMLEFT: case OB_CORNER_BOTTOMRIGHT: dlt = t - *h + c->frame->area.height; drb = b; - if (t >= at && dlt < at && dlt >= at - edge_resistance) + if (t >= at && dlt < at && dlt >= at - config_resist_edge) *h = b - at + 1; break; } } } - -static void event(ObEvent *e, void *foo) -{ - if (e->type == Event_Client_Moving) - resist_move(e->data.c.client, &e->data.c.num[0], &e->data.c.num[1]); - else if (e->type == Event_Client_Resizing) - resist_size(e->data.c.client, &e->data.c.num[0], &e->data.c.num[1], - e->data.c.num[2]); -} - -void plugin_startup() -{ - dispatch_register(Event_Client_Moving | Event_Client_Resizing, - (EventHandler)event, NULL); -} - -void plugin_shutdown() -{ - dispatch_register(0, (EventHandler)event, NULL); -}
D plugins/resistance/resistance.glade

@@ -1,109 +0,0 @@

-<?xml version="1.0" standalone="no"?> <!--*- mode: xml -*--> -<!DOCTYPE glade-interface SYSTEM "http://glade.gnome.org/glade-2.0.dtd"> - -<glade-interface> - -<widget class="GtkWindow" id="resistwindow"> - <property name="title" translatable="yes"></property> - <property name="type">GTK_WINDOW_POPUP</property> - <property name="window_position">GTK_WIN_POS_NONE</property> - <property name="modal">False</property> - <property name="resizable">True</property> - <property name="destroy_with_parent">False</property> - - <child> - <widget class="GtkVBox" id="vbox1"> - <property name="visible">True</property> - <property name="homogeneous">False</property> - <property name="spacing">0</property> - - <child> - <widget class="GtkHBox" id="hbox2"> - <property name="visible">True</property> - <property name="homogeneous">False</property> - <property name="spacing">6</property> - - <child> - <widget class="GtkLabel" id="label1"> - <property name="visible">True</property> - <property name="label" translatable="yes">_Strength</property> - <property name="use_underline">True</property> - <property name="use_markup">False</property> - <property name="justify">GTK_JUSTIFY_LEFT</property> - <property name="wrap">False</property> - <property name="selectable">False</property> - <property name="xalign">0.49</property> - <property name="yalign">0.5</property> - <property name="xpad">0</property> - <property name="ypad">0</property> - <property name="mnemonic_widget">resist_strength</property> - </widget> - <packing> - <property name="padding">0</property> - <property name="expand">False</property> - <property name="fill">False</property> - </packing> - </child> - - <child> - <widget class="GtkSpinButton" id="resist_strength"> - <property name="visible">True</property> - <property name="tooltip" translatable="yes">Set to the amount of resistance to provide when moving or resizing a window past a screen or window edge. A value of 0 disables resistance.</property> - <property name="can_focus">True</property> - <property name="climb_rate">1</property> - <property name="digits">0</property> - <property name="numeric">True</property> - <property name="update_policy">GTK_UPDATE_ALWAYS</property> - <property name="snap_to_ticks">False</property> - <property name="wrap">False</property> - <property name="adjustment">1 0 30 1 10 10</property> - </widget> - <packing> - <property name="padding">0</property> - <property name="expand">False</property> - <property name="fill">True</property> - </packing> - </child> - </widget> - <packing> - <property name="padding">0</property> - <property name="expand">True</property> - <property name="fill">True</property> - </packing> - </child> - - <child> - <widget class="GtkHBox" id="hbox1"> - <property name="visible">True</property> - <property name="homogeneous">False</property> - <property name="spacing">6</property> - - <child> - <widget class="GtkCheckButton" id="resist_windows"> - <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="label" translatable="yes">Resist other _Windows</property> - <property name="use_underline">True</property> - <property name="relief">GTK_RELIEF_NORMAL</property> - <property name="active">False</property> - <property name="inconsistent">False</property> - <property name="draw_indicator">True</property> - </widget> - <packing> - <property name="padding">0</property> - <property name="expand">False</property> - <property name="fill">False</property> - </packing> - </child> - </widget> - <packing> - <property name="padding">0</property> - <property name="expand">True</property> - <property name="fill">True</property> - </packing> - </child> - </widget> - </child> -</widget> - -</glade-interface>
D plugins/resistance/resistance.gladep

@@ -1,8 +0,0 @@

-<?xml version="1.0" standalone="no"?> <!--*- mode: xml -*--> -<!DOCTYPE glade-project SYSTEM "http://glade.gnome.org/glade-project-2.0.dtd"> - -<glade-project> - <name>resistance</name> - <program_name>resistance</program_name> - <gnome_support>FALSE</gnome_support> -</glade-project>
D plugins/resistance/resistance.h

@@ -1,1 +0,0 @@

-#define DEFAULT_RESISTANCE 10
D plugins/resistance/resistance_config.c

@@ -1,64 +0,0 @@

-#include "plugins/obconf_interface.h" -#include "parser/parse.h" -#include "resistance.h" -#include <gtk/gtk.h> -#include <glade/glade.h> - -static GtkWidget *conf_widget; -static GtkCheckButton *conf_resist_windows; -static GtkSpinButton *conf_resist_strength; -static gboolean conf_edited = FALSE; - -int plugin_interface_version() { return OBCONF_INTERFACE_VERSION; } - -char *plugin_name() { return "Resistance"; } -char *plugin_plugin_name() { return "resistance"; } -void plugin_icon() {} - -GtkWidget *plugin_toplevel_widget() { return conf_widget; } - -gboolean plugin_edited() { return conf_edited; } - -void plugin_load(xmlDocPtr doc, xmlNodePtr root) -{ - xmlNodePtr node, n; - - gtk_spin_button_set_value(conf_resist_strength, DEFAULT_RESISTANCE); - gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(conf_resist_windows), - DEFAULT_RESIST_WINDOWS); - - node = parse_find_node("resistance", root); - while (node) { - if ((n = parse_find_node("strength", node))) - gtk_spin_button_set_value(conf_resist_strength, - parse_int(doc, n)); - if ((n = parse_find_node("windows", node))) - gtk_toggle_button_set_active - (GTK_TOGGLE_BUTTON(conf_resist_windows), - parse_bool(doc, n)); - - node = parse_find_node("resistance", node->next); - } -} - -void plugin_save(xmlDocPtr doc, xmlNodePtr root) -{ -} - -void plugin_startup() -{ - GladeXML *xml; - - xml = glade_xml_new("obconf.glade", NULL, NULL); - glade_xml_signal_autoconnect(xml); - - conf_widget = glade_xml_get_widget(xml, "resistwindow"); - conf_resist_strength = - GTK_SPIN_BUTTON(glade_xml_get_widget(xml, "resist_strength")); - conf_resist_windows = - GTK_CHECK_BUTTON(glade_xml_get_widget(xml, "resist_windows")); -} - -void plugin_shutdown() -{ -}