summaryrefslogtreecommitdiff
path: root/openbox/client.c
AgeCommit message (Collapse)Author
2011-01-24if no launch time is provided for an application, make one up.Dana Jansens
if the window is related to other existing windows and one of those windows was the last used then we will give it a launch time equal to the last user time, which will end up giving the window focus probably. else the window is related to other windows, but you are not working in them? seems suspicious, so we will give it a launch time of NOW - STEAL_INTERVAL, so it will be given focus only if we didn't use something else during the steal interval. else the window is all on its own, so we can't judge it. give it a launch time equal to the last user time, so it will probably take focus. this way running things from a terminal will give them focus, but popups without a launch time shouldn't steal focus so easily.
2011-01-24Big changes to placement across multiple monitors.Dana Jansens
Add a Primary option for which monitor to place new windows on. Make "Active" the default instead of "Any", which is just totally crazy. When a window is being placed in the FOREGROUND, use a monitor chosen in the following order: 1. same monitor as parent 2. primary monitor if placement=PRIMARY active monitor if placement=ACTIVE pointer monitor if placement=MOUSE 3. primary monitor 4. other monitors where the window has group members on the same desktop 5. other monitors where the window has group members on other desktops 6. other monitors When a window is being placed in the BACKGROUND, use a monitor chosen in the following order: 1. same monitor as parent 2. other monitors where the window has group members on the same desktop 2a. primary monitor in this set 2b. other monitors in this set 3. other monitors where the window has group members on other desktops 3a. primary monitor in this set 3b. other monitors in this set 4. other monitors 4a. primary monitor in this set 4b. other monitors in this set Decide to focus the new window before placing it, so we know if it will be placed in the foreground or background. Always choose a single monitor, then place on it, rather than possibly moving to a "backup" monitor. Unpredictable monitor placement is horrible.
2011-01-24don't steal focus from a window if it was used very recently, when someone ↵Dana Jansens
uses _NET_ACTIVE request.
2011-01-24Big rework of image.c and the image cache system.Dana Jansens
Added a lot of comments, simplified call graphs. Added full (not second-class) support for images coming from named sources (files, icon themes). RrImage holds an RrImageSet. RrImageSet holds a bunch of RrImagePic, which are different sizes of a logical image. RrImageSet objects can be merged if it is discovered they (will) share an RrImagePic. The RrImage objects are updated to use the new merged RrImageSet.
2011-01-24Handle STRING and COMPOUND_TEXT type text properties.Dana Jansens
STRING should be latin1 text (plus TAB and LF) COMPOUND_TEXT should be encoded in the current locale.
2010-06-26settings can't be NULL here, or we'd have already crashed anywayMikael Magnusson
2010-06-14Fix the EXTENTS reported on window frames.Dana Jansens
Change the order things are done on map, so we apply startup state without any states set first, thus getting all the functions possible for the window type etc. then change the order states are applied, as some remove the ability to apply others (ie fullscreen comes last). Add an oldsize to ObFrame that remembers the size of the frame last reported to the world through the EXTENTS property. If you frame_adjust_area(FAKE) then frame_adjust_area(NONFAKE), the EXTENTS would not be updated since the oldsize wasn't remembered across fake updates. Make the extentsrequest test ask about windows with states set also.
2010-06-14allow a user to set "undecorated" on a window without decorationsDana Jansens
if not based on window type, the app may decide to have decorations again sometime. this was not always legal but chromium has made it so.
2010-05-21allow new windows on other desktops to get focused if specified in a per-app ↵Dana Jansens
rule you can not client_active() with user=false and desktop=true and activate things on other desktops, by the general focus steal restrictions, if you wanted to do that sorta thing
2010-05-20don't need a force_reply when changing the decor for a windowDana Jansens
it will send a configurenotify if the client's rootwindow position changed
2010-05-20allows a window to unmax by resizing.Dana Jansens
makes "clever" use of the client's pre_max_area values to allow this to happen without flashing, and preserving them in case the user cancels the resize after it has become unmaximized.
2010-04-28fix XSYNCronization of resizes (especially with two monitors).Dana Jansens
1) a ConfigureNotify must always follow a Sync notification 2) determine the final size of the window with its position else struts are not applied properly for (partly) maximized windows 3) set the sync counter to a value when managing a new window
2010-04-28make sure clients stay on screen when the root window changes size, and ↵Dana Jansens
maximized/fullscreen windows must be on some monitor or it doesn't make much sense (and asserts)
2010-04-28Remove two unused variablesMikael Magnusson
Remains from 64adc0eeba598cb1469b2140777fba30e3053f0e
2010-04-28make an event queue for X events. the queue's min size is 16 XEvents (~3k)Dana Jansens
2010-04-20don't change stacking stuff on windows when moving them during the unmanage ↵Dana Jansens
phase.
2010-04-16event_curtime is replaced (publicly) by event_time()Dana Jansens
This function never returns CurrentTime, which is nice, cuz using CurrentTime for XSetFocus always sucks. If the current XEvent did not have a timestamp, then event_time() will find one. It finds the first timestamp available in the X event queue, meaning the earliest timestamp >= the current (nontimestamped) event. All future events should have a timestamp >= event_time(), so using this in XSetFocus() should not mess up any future calls we make to it. This change seems to work well, as it appears to fix bug #3648.
2010-04-16When determining the current timestamp, try get something a lil more accurateDana Jansens
Get the first timestamp from the event queue, rather than (potentially) the last. also treat it as the actual event_curtime, meaning it is used when focusing a newly mapped window etc.
2010-04-16add an option to next/previous window to only include ↵Dana Jansens
hilited/flashing/urgent windows (feature req/bug #4341)
2010-04-16use const Rect* not Rect const*Dana Jansens
2010-03-29if a launch time isnt there (like for client_activate) assume the window ↵Dana Jansens
launched before the last desktop switch, not after. ie don't change desktops if you're not sure.
2010-03-25allow non-normal windows to go to 0,0. and remove a debugging g_printDana Jansens
2010-03-01add a function client_is_oldfullscreen() that determines if a window is an ↵Dana Jansens
"oldschool fullscreen window" or not. use this throughout. and allow oldschool fullscreen windows to move to 0,0 even with a strut there.
2010-03-01when an app tries to move to 0,0 and there is a strut there (java swing!), ↵Dana Jansens
move it to inside the strut instead (unless it is an oldschool fullscreen app)
2010-02-16a couple more g_free() to g_slice_free()'sDana Jansens
2010-02-16missed a g_free() that should be g_slice_free()Dana Jansens
2010-02-15dont trust the _NET_ACTIVE_WINDOW timestamp. (fixes bug #4519)Dana Jansens
if we decide to focus the window, do not use their provided timestamp. chromium gives a very old timestamp, which means we think we're focusing the window but it never actually gets focus, leading to inconsistent behaviour by openbox. use the timestamp for making decisions about passing focus if you want (we dont right now), but not for the XSetInputFocus call.
2010-02-12remove a bunch of g_new()/g_free() by returning Rect const*'s from screen ↵Dana Jansens
area functions when possible
2010-02-12using g_slice_new() instead of g_new() part 1Dana Jansens
2010-01-15make edge detection for maximized windows only look at the edges of screensDana Jansens
2010-01-15Remember the maximized state of a window when it goes fullscreen and try ↵Dana Jansens
restore it after
2010-01-14If a window places itself at (0,0) and there are struts there, assume it is ↵Dana Jansens
a bug. Also allow oldschool fullscreen windows that cover all monitors on a multihead setup to work properly Added a test 'oldfullscreen' that makes a oldschool fullscreen window
2010-01-14allow app rules to match windows by their title when mappingDana Jansens
and save the title in the _OB_APP_TITLE property
2010-01-11Merge branch 'backport' into workDana Jansens
Conflicts: configure.ac data/rc.xml openbox/client.c openbox/event.c openbox/focus_cycle.c openbox/focus_cycle_popup.c openbox/openbox.c openbox/prop.c openbox/prop.h openbox/screen.c parser/parse.c version.h.in
2010-01-11More work on refreshing the focus cycle dialog when windows are ↵Dana Jansens
added/removed from the valid focus order
2010-01-11Add _OB_VERSION and _OB_APP_ROLE/CLASS/NAME/TYPEDana Jansens
Add _OB_VERSION property on the root window. Change _OB_ROLE/CLASS/NAME to _OB_APP_*. Add _OB_APP_TYPE which has a string for the type chosen for the window on mapping by Openbox. Adjust the rc.xml to match these changes.
2010-01-11Redraw the focus cycle popup when the list of focusable windows changes, ↵Dana Jansens
rather than closing it
2010-01-10allow application rules to place transient/dialog/splash windows, and allow ↵Dana Jansens
application rules to match only on the role or type if you wish.
2010-01-08Make focus_valid_target() take a desktop argument.Dana Jansens
So you can find valid targets on desktops other than the currently visible one
2009-12-21Set up work for making a 3.5 prerelease.Dana Jansens
Set version stuff to 3.5.0-rc1. Copy the CHANGELOG from 3.4-working. Rename the obt-4.0 and obrender-4.0 pkgconfig stuff to obt-3.5 and obrender-3.5 Rename the "render" directory to "obrender" so that the public headers can be installed in <obrender/*>
2009-12-11Merge branch 'backport' into workDana Jansens
Conflicts: openbox/config.c openbox/event.c openbox/prop.c openbox/prop.h openbox/screen.c openbox/screen.h
2009-12-11Set hints that remember the WM_WINDOW_ROLE and WM_CLASS properties for our ↵Dana Jansens
users. The hints are _OB_ROLE, _OB_NAME, and _OB_CLASS.
2009-12-09Make the edge detection fully include monitor edges.Dana Jansens
This fixes the move-to-edge behaviour, when moving past the edge of a monitor, the window will stop with its tail edge against the inside of the monitor's edge.
2009-12-09Properly react when a client's strut changes.Dana Jansens
Previously it would only react if the height of the strut changed, not if its start/end changed (that was a long-standing bug).
2009-12-09Fix the Focus/Activate actions to focus windows on other desktops correctlyDana Jansens
2009-12-09Allow skip_taskbar windows to be focused on map when the user requests it in ↵Dana Jansens
rc.xml. Fixes bug #4350
2009-12-08Merge branch 'backport' into workDana Jansens
Conflicts: openbox/actions/all.h openbox/actions/session.c openbox/client.c openbox/event.c openbox/grab.c
2009-12-08Don't hilite new windows when we're restoring them from a saved session.Dana Jansens
2009-12-08Fix client_activate() to work for internal Openbox menusDana Jansens
client_activate() is a helpful way to focus a window on another desktop, but only Openbox is allowed to do such things, user messages cannot.
2009-12-08Don't kill keygrabs when focus moves.Dana Jansens
Applications should be better behaved by now, and GTK based apps seem to be at least. We can file bug reports with them if we need to still.