Commit Graph

1135 Commits

Author SHA1 Message Date
Axel Dörfler
19d801a6b6 Moving/resizing is now routed over the desktop as well.
This also allows the workspaces layer for these actions, which is now done as well.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@15258 a95241bf-73f2-0310-859d-f6bbb57e9c96
2005-12-01 10:31:30 +00:00
Axel Dörfler
a8b49ab310 Implemented AS_COUNT_WORKSPACES and AS_SET_WORKSPACE_COUNT server side.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@15253 a95241bf-73f2-0310-859d-f6bbb57e9c96
2005-11-30 22:48:13 +00:00
Axel Dörfler
5ca8477eca * the Workspace class is now hidden and put into Workspace::Private; the new
Workspace class is a simple accessor to this class that takes care about
  locking (currently, it's just the desktop lock, maybe it'll stay that way).
* WorkspacesLayer now displays the window thumbs again.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@15250 a95241bf-73f2-0310-859d-f6bbb57e9c96
2005-11-30 19:56:44 +00:00
Axel Dörfler
ed656a3a9b You must not have RootLayer locked when calling any method from EventDispatcher;
just another case of troublesome generic RootLayer locking in ServerWindow
(I'm looking forward to get rid of this).


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@15249 a95241bf-73f2-0310-859d-f6bbb57e9c96
2005-11-30 19:51:43 +00:00
Axel Dörfler
dd43887c95 Forgot to remove the Unlock(), thanks to Stephan for pointing this out.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@15242 a95241bf-73f2-0310-859d-f6bbb57e9c96
2005-11-30 16:22:18 +00:00
Axel Dörfler
a631158a62 Reenabled most of the workspaces functionality - the Workspaces window doesn't
show any windows, but everything else seems to work fine.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@15241 a95241bf-73f2-0310-859d-f6bbb57e9c96
2005-11-30 15:47:01 +00:00
Axel Dörfler
92766f93e2 EventDispatcher::_Unset() did not wait for the event looper thread under BeOS, as
wait_for_thread() always returns B_BAD_ADDRESS when the second argument is NULL
(it works fine under Haiku).
Instead of enqueuing a B_QUIT_REQUESTED message, InputStream now directly quits
when the 'quit' code is read from the port (B_QUIT_REQUESTED was never handled
by the event loop either, it just didn't get noticed because of the wrong
wait_for_thread() usage).


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@15240 a95241bf-73f2-0310-859d-f6bbb57e9c96
2005-11-30 15:31:33 +00:00
Axel Dörfler
66fdfb907b Some preparations to reactivate the workspace feature.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@15239 a95241bf-73f2-0310-859d-f6bbb57e9c96
2005-11-30 11:19:20 +00:00
Axel Dörfler
15918e4fa5 * new windows now get a fake B_MOUSE_MOVED message in case they are opened
directly under the mouse cursor.
* Added Desktop::ShowWindow() and HideWindow().


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@15238 a95241bf-73f2-0310-859d-f6bbb57e9c96
2005-11-30 10:45:01 +00:00
Axel Dörfler
a9b83b752c Added a bit of documentation to the EventDispatcher.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@15229 a95241bf-73f2-0310-859d-f6bbb57e9c96
2005-11-29 17:00:08 +00:00
Axel Dörfler
f89b4c9a23 Have I said input event handling is done?
* didn't realize that mouse events always go to the view under the mouse, not
  only if its the focus window (FFM can really do harm, after all :-)).
* removed a TODO from the list: EventDispatcher::Target is now a public
  class EventTarget, and every ServerWindow has one.
* as a result, EventDispatcher no longer manages targets itself, it
  just maintains a list of them. You no longer set messengers, you
  only set targets.
* customization of the message filters, they no longer inherit from
  BMessageFilter (but EventFilter).
* a message target is no longer set explicetly anywhere, it's only
  changed in the message filters if needed.
* therefore, no more locking mess in the EventDispatcher needed.
* this also made the EventDispatcher::fLastFocus stuff superfluous.
* moved the RootLayer::MouseEventHandler() into the message filter.
* Replaced RootLayer::_ChildAt() with WindowAt().
* WindowLayer now has an idea if it has focus or not, it no longer needs
  to query the RootLayer for this - maybe we should rename "focus" to
  "active", though (as far as layers are concerned).
* the "_view_token" data is now added from the EventDispatcher, not
  the (Window)Layer class anymore.
* removed Layer::MouseWheelChanged() as we currently don't need it
  (if the need arises, we can add it back later again)
* there is still no mouse moved message sent when opening a window
  under the cursor, though...


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@15228 a95241bf-73f2-0310-859d-f6bbb57e9c96
2005-11-29 16:01:41 +00:00
Axel Dörfler
27adb96962 Massive RootLayer & Workspace tearing:
* workspace switch and subset windows functionality temporarily removed
  (away with that mess!).
* no more RevealWMState() - we now have methods like ActivateWindow()
  and SendWindowBehind() that do all the work - just a little cleaner
  and with less overhead.
* Workspace is now a pretty passive class - it only stores configurations
  of the windows and screens.
* added an evil work-around for a locking problem (in RootLayer::_SetFocus()).
* I'll plan to move pretty much all of the remaining root layer functionality
  to Desktop - so that the all regions lock is only held in case clipping
  regions are affected.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@15207 a95241bf-73f2-0310-859d-f6bbb57e9c96
2005-11-28 23:36:59 +00:00
Axel Dörfler
8fc80f17d9 refactored a _AddChildToList() and a _RemoveChildFromList() out of AddChild() and
RemoveChild() (very similar to what BView does).


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@15206 a95241bf-73f2-0310-859d-f6bbb57e9c96
2005-11-28 23:27:20 +00:00
Jérôme Duval
ae0a90cedb SetAppCursor also sets cursor status
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@15205 a95241bf-73f2-0310-859d-f6bbb57e9c96
2005-11-28 23:13:16 +00:00
Axel Dörfler
3f5eacff02 Quick and dirty hack to let those font rendering problems disappear - I don't really
know what's going on, but this appears to fix it. And since we'll get a new glyph
layout backend sooner or later, I don't want to mess with that stuff again.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@15176 a95241bf-73f2-0310-859d-f6bbb57e9c96
2005-11-26 22:26:50 +00:00
Axel Dörfler
a7b93468cc SendMessageToClient() now gives a little more info in case sending failed.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@15174 a95241bf-73f2-0310-859d-f6bbb57e9c96
2005-11-26 20:35:58 +00:00
Axel Dörfler
485b948731 Removed "Active" stuff from Workspaces state.
As a side effect, the desktop is now clickable again.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@15173 a95241bf-73f2-0310-859d-f6bbb57e9c96
2005-11-26 20:22:30 +00:00
Axel Dörfler
df36243372 Now sends B_SCREEN_CHANGED messages to all windows when the screen resolution changes.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@15167 a95241bf-73f2-0310-859d-f6bbb57e9c96
2005-11-26 16:56:52 +00:00
Axel Dörfler
6e9ab86fc5 Added a ColorSpace() method.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@15166 a95241bf-73f2-0310-859d-f6bbb57e9c96
2005-11-26 16:55:23 +00:00
Axel Dörfler
26b02ddc80 The input_server is now notified when the screen resolution is changed.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@15165 a95241bf-73f2-0310-859d-f6bbb57e9c96
2005-11-26 16:22:06 +00:00
Axel Dörfler
b635c022cb Don't check if the requested display mode is in the mode list - just ask the
graphics add-on if it can handle it.
This fixes setting the screen resolution natively. Unfortunately, that's not
all (the input_server still constraints the cursor position to the previous
resolution...). Also, there is apparently no B_SCREEN_CHANGED sent.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@15164 a95241bf-73f2-0310-859d-f6bbb57e9c96
2005-11-26 15:52:22 +00:00
Axel Dörfler
39b345c7b6 Added temporary hack so that windows don't get mouse messages if the cursor
is not over them - this should be better integrated with the rest of the
code (later, when we don't rely on RootLayer for everything anymore).


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@15151 a95241bf-73f2-0310-859d-f6bbb57e9c96
2005-11-25 16:11:19 +00:00
Axel Dörfler
fa2c53ed52 Added very simple and annoying profiling mechanism to ServerWindow's message
processing (enabled when PROFILE_MESSAGE_LOOP is defined).


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@15150 a95241bf-73f2-0310-859d-f6bbb57e9c96
2005-11-25 15:35:47 +00:00
Axel Dörfler
67e79bf45a A message looper can now have a death semaphore, ServerWindow now uses them.
ServerApp now waits up to 3 seconds for windows before killing them - it now
waits on the death semaphore, and only kills a window if it didn't quit fast
enough.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@15147 a95241bf-73f2-0310-859d-f6bbb57e9c96
2005-11-25 13:49:29 +00:00
Axel Dörfler
85d981378a Quick fix for our broken locking model:
The mouse filter needs to lock RootLayer, but the event dispatcher lock is held
during that time, too, so that the focus cannot change in the mean time.
On the other side, ServerWindow needs to lock the event dispatcher when adding
or removing a listener, or for AS_GET_MOUSE - but since it always helds the
root layer lock during message dispatching this easily resulted in a deadlock.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@15146 a95241bf-73f2-0310-859d-f6bbb57e9c96
2005-11-25 12:50:21 +00:00
Stephan Aßmus
23f32b1552 corrected and cleaned up coordinate conversion. conversion from or to parent coords doesn't actually require a parent, directly using fScrollingOffset, uses less stack memory now and should be faster (especially when converting regions, because those were offsetted twice)
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@15136 a95241bf-73f2-0310-859d-f6bbb57e9c96
2005-11-24 21:23:33 +00:00
Axel Dörfler
1863b5b6a4 Removed the "owner" stuff from Layer - it already knows its window.
Layer no longer knows anything about its subclass WindowLayer.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@15131 a95241bf-73f2-0310-859d-f6bbb57e9c96
2005-11-24 17:59:49 +00:00
Axel Dörfler
14e1abfe7d Made Layer::_AllRedraw() virtual so that it doesn't need this ugly hack to
send _UPDATE_ messages (WindowLayer now overrides that method).


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@15129 a95241bf-73f2-0310-859d-f6bbb57e9c96
2005-11-24 17:54:14 +00:00
Axel Dörfler
4b813bf267 Renamed WinBorder to WindowLayer, and OffscreenWinBorder to OffscreenWindowLayer.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@15128 a95241bf-73f2-0310-859d-f6bbb57e9c96
2005-11-24 17:45:26 +00:00
Axel Dörfler
2430abdd9a Some minor cleanup.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@15127 a95241bf-73f2-0310-859d-f6bbb57e9c96
2005-11-24 17:12:32 +00:00
Axel Dörfler
0a9634a6f4 Minor cleanup: removed unused stuff.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@15126 a95241bf-73f2-0310-859d-f6bbb57e9c96
2005-11-24 16:55:17 +00:00
Axel Dörfler
5afc064831 In anticipation of Stippi's new clipping code, I refactored the EventDispatcher
a bit:
* listeners are now managed per target (ie. per messenger) (by the Target class)
* therefore, the fFocusTokens/fLastFocusTokens lists are no longer needed; every
  Target knows its listeners already.
* this also fixes the obvious bug that the focus window's views would get both
  keyboard and pointer events, no matter which of them they originally wanted.
* renamed event_target to event_listener (there was actually a mix up in naming
  before - to the outside it was "listener", and internally, "target" was used)
* WinBorder::MouseMoved()/MouseUp() now also add the view token to the message;
  the messages weren't received by the target before (unless the view used
  tracking via BView::SetMouseEventMask()...) - maybe the client should only
  update fLastMouseMoved on B_MOUSE_MOVED events, and direct B_MOUSE_UP/DOWN
  (plus wheel changes) always to fLastMouseMoved...
* some cleanup.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@15123 a95241bf-73f2-0310-859d-f6bbb57e9c96
2005-11-24 16:04:29 +00:00
Axel Dörfler
5d29bfa5fa * Moved change_winBorder_feel() into GoChangeWinBorderFeel() and removed the former.
* Renamed GoChangeWinBorderFeel() to ChangeWinBorderFeel().


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@15114 a95241bf-73f2-0310-859d-f6bbb57e9c96
2005-11-24 13:26:26 +00:00
Axel Dörfler
bde8b9c6e0 * Layers are now put into an application wide token space that mirrors the
client's token space.
* finding layers by token is now O(1) instead of O(n) (as they are looked
  up in the token space).
* removed Layer::FindView() as it's no longer needed (or should be used).


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@15113 a95241bf-73f2-0310-859d-f6bbb57e9c96
2005-11-24 13:14:49 +00:00
Axel Dörfler
46b7964e5c Got rid of "cnt" debugging stuff.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@15110 a95241bf-73f2-0310-859d-f6bbb57e9c96
2005-11-24 12:22:55 +00:00
Axel Dörfler
343e4ff465 Got rid of fAdFlags whatever that was meant to be.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@15109 a95241bf-73f2-0310-859d-f6bbb57e9c96
2005-11-24 12:21:07 +00:00
Axel Dörfler
5ed0556236 * Got rid of the frightening Layer::fCurrent/RootLayer::fWinBorderIndex as well as
NextChild() and PreviousChild() - the current WinBorder list is now rebuilt on every
  change; this is not perfect, and only a temporary solution (but cleaner than the
  previous one).
* Introduced Layer::PreviousLayer()/NextLayer() methods that return the previous resp.
  the next sibling.
* Moved {show|hide}_winBorder() into {Show|Hide}WinBorder() and got rid of the former.
* Renamed Layer::fServerWin to fWindow.
* removed some unused stuff, minor cleanup.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@15108 a95241bf-73f2-0310-859d-f6bbb57e9c96
2005-11-24 12:19:11 +00:00
Axel Dörfler
5a67ef6634 Removed broken Layer::LayerAt() semantics (for recursive == false),
and introduced a RootLayer::_ChildAt() that is used instead.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@15097 a95241bf-73f2-0310-859d-f6bbb57e9c96
2005-11-23 22:01:49 +00:00
Axel Dörfler
a8d44b6fea Quick fix for the broken focus changing I introduced earlier.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@15096 a95241bf-73f2-0310-859d-f6bbb57e9c96
2005-11-23 21:52:36 +00:00
Axel Dörfler
6450b76dd4 Next big step in the event handling:
* RootLayer's mouse event processing is now at its minimum - the
  EventDispatcher handles them now. As a result, a window will now
  get only one message per event.
* RootLayer adds "_view_token" to mouse moved messages that specify
  the view currently under the cursor.
* There is now a mouse event layer in RootLayer that gets preferred
  when it's set - this is now used for the window moving instead of
  the previous mechanism.
* changed the previous DistributeMessage() to an UnpackMessage()
  method following Adi's suggestion.
* caveat: some things might be functionally broken in RootLayer now
  because of removing the mouse notification stuff.
* "be:transit" handling is now done completely client side by
  BWindow::_SanitizeMessage(() (similar to what the input_server does).
  This should also make the mechanism pretty robust, since every
  B_MOUSE_MOVED message can now trigger the view transit (in case a
  message is lost). B_WINDOW_ACTIVATED messages should be generated
  client side as well.
* renamed AS_LAYER_GET_MOUSE_COORDS to AS_GET_MOUSE as it's not a
  layer specific command, and also gets the mouse buttons.
* B_MOUSE_* messages from the up server now contain only a "screen_where"
  field; "where" (in window's coordinates) and "be:view_where" are
  added in BMessage::_SanitizeMessage().
* messages that don't have a valid target in the looper are now
  dropped instead of being sent to the looper - this should be done
  in BLooper as well, though.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@15087 a95241bf-73f2-0310-859d-f6bbb57e9c96
2005-11-23 15:17:58 +00:00
Axel Dörfler
876a3803df * removed adding "be:transit" stuff in the EventDispatcher - this is now only done
client side (or will be, with the next commit).
* added GetMouse() functionality.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@15084 a95241bf-73f2-0310-859d-f6bbb57e9c96
2005-11-23 11:27:09 +00:00
Axel Dörfler
b361534e3c Filter out some fields in the message that we may set ourselves.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@15078 a95241bf-73f2-0310-859d-f6bbb57e9c96
2005-11-22 20:34:02 +00:00
Axel Dörfler
b095201503 * changed the way a message is forwarded to the focus view (instead of adding
a suspend focus field to the message, there is now a "feed focus" field in
  case the message should be forwarded).
* added a comment to the BPoint version of _FindView() (since it's broken)
* _DistributeMessage() is now called after _DetermineTarget() - so that it
  can prevent sending the message twice to the focus view.
* removed BWindow::DoUpdate() as it's no longer used.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@15066 a95241bf-73f2-0310-859d-f6bbb57e9c96
2005-11-22 12:49:35 +00:00
Axel Dörfler
82d8744887 * now all event targets of the focus window get into the focus list - that
way, we always send only one message per event, no matter how many targets
  there are in the window (the focus event list was not always maintained
  correctly before, too).
* the current mouse filter eats all B_MOUSE_UP events, and therefore, the
  temporary event targets were never removed.
* changed the way BWindow::_DistributeMessage() recognizes if it should forward
  the event - not yet final, though.
* naming is now more consistent (events -> event_mask).
* some minor cleanup.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@15058 a95241bf-73f2-0310-859d-f6bbb57e9c96
2005-11-21 16:25:23 +00:00
Axel Dörfler
51a16ce830 No longer needed.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@15049 a95241bf-73f2-0310-859d-f6bbb57e9c96
2005-11-20 17:26:25 +00:00
Axel Dörfler
4ceb1e519c * reverted Adi's premature changes to BWindow and restored _DetermineTarget() and
task_looper() again.
* removed BMessenger::fPreferred - whenever you had to specify "usePreferred" separately,
  you don't have to do that anymore - use B_PREFERRED_TOKEN instead.
* fixed BTokenSpace::GetToken() semantics: it will no longer touch the "object" argument
  in case of failure.
* Introduced a BWindow::_DistributeMessage() that will be part of the event dispatcher
  counterpart to the app_server (the other will be _DetermineTarget()).
* Made it easier to use Michael's Message4 implementation: just add the following line
  to your UserBuildConfig:
	AppendToConfigVar DEFINES : HAIKU_TOP src : USING_MESSAGE4 : global ;
* Introduced ServerWindow::HandlerMessenger() and FocusMessenger() - the first will
  target the client handler, while the other will target the preferred handler of the
  client looper (usually the view having focus).
* Fixed dano message unflattening in the Message4 code.
* Changed BMessage::PrintToStream() to no longer use macros in the Message4 implementation.
* I hope that's all - it's a huge change, but it's all connected.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@15046 a95241bf-73f2-0310-859d-f6bbb57e9c96
2005-11-20 16:24:23 +00:00
Axel Dörfler
d1071ff01b Removed Utils.cpp - it's not really useful anymore.
Note, I temporarily kept the Utils.h in, because I have other local changes to be
committed soon (sorry for this, but it shouldn't harm).


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@15043 a95241bf-73f2-0310-859d-f6bbb57e9c96
2005-11-20 16:09:16 +00:00
Axel Dörfler
ae3ba51fc1 Some minor fixes.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@15042 a95241bf-73f2-0310-859d-f6bbb57e9c96
2005-11-20 16:03:11 +00:00
Axel Dörfler
ece36066af Removed third argument from calls to ServerWindow::SendMessageToClient() - it's predefined
to "false" anyway, and will be removed shortly.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@15041 a95241bf-73f2-0310-859d-f6bbb57e9c96
2005-11-20 15:52:48 +00:00
Stephan Aßmus
b223f78041 fixes origin and scale handling, it behaves mostly like R5 now (it is used for drawing only, yes not mouse coords or anything else). Also fixes offscreen layers clipping rebuilding when the user defined clipping is added or changed
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@15040 a95241bf-73f2-0310-859d-f6bbb57e9c96
2005-11-20 15:10:18 +00:00