Commit Graph

524 Commits

Author SHA1 Message Date
Jérôme Duval
2272b5dbbd actually don't send B_SILENT_RELAUNCH for any message in the initial message list
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@21990 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-08-16 19:03:45 +00:00
Jérôme Duval
a3192bf3a7 Tracker seems to launch applications with a B_REFS_RECEIVED message in the initial message list.
Now checks if such a message is present and avoids sending B_SILENT_RELAUNCH in this case, and also in the standard case with a ref.
This fixes bug #1387


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@21987 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-08-16 17:36:58 +00:00
Michael Lotz
d3ce129ef3 Use swap_data() when unflattening a swapped message. It fits this purpose perfectly as it does conversion based on the type code. Now known type like B_INT32_TYPE will get swapped automatically.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@21913 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-08-12 22:27:25 +00:00
Stephan Aßmus
fddbc2311f * fix attaching and reading empty regions
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@21909 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-08-12 13:07:55 +00:00
Michael Lotz
0127fb779d * Respect endiannes for item lengths inside swapped BMessages
* Also swap the flattened size when creating the read buffer
* Define specialized byte_swap()s for unsigned types too so that type_code and the like get swapped correctly

This should fix bug #1371.

git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@21901 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-08-12 10:32:21 +00:00
Axel Dörfler
1260fa6595 fCachedStack needs to be initialized and reset when the looper is unlocked.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@21864 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-08-08 23:11:13 +00:00
Axel Dörfler
eaad52e8d7 Now uses the cache stack trick for a cheaper check_lock() version as suggested by stippi.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@21863 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-08-08 22:43:52 +00:00
Axel Dörfler
c7f1e4bda3 Sorry, the previous patch for WindowAt() by Váradi Zsolt Gyula was broken as well.
This change now actually fixes its logic; thanks for the hint, though :-)


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@21777 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-07-31 21:50:28 +00:00
Jérôme Duval
c10776a209 applied patch from Váradi Zsolt Gyula: fixes People's (#1308) and Launchbox's closing problem. Thanks.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@21776 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-07-31 20:56:31 +00:00
Stephan Aßmus
582da17386 * complete reimplementation of BRegion and it's backend
I "ported" the region implementation from XOrg to work on BRegion data.

This resulted in pretty much the same code structure as before, with 
RegionSupport.cpp containing the messy details. Only now it _is_ really messy
from a code beauty point of view. I didn't exactly feel like cleaning it
up right now... but I guess I will have to.

So what does this mean - our BRegion implementation was very slow (no offense!),
and on top of that it scaled very badly with more and more rects. The new
implementation seems to be on par with the very fast R5 implementation and
the data looks exactly the same too. BRegion is very performance critical
for the app_server, and I cannot wait to try this on my slow computer...

Some changes are noteworthy: The right and bottom coordinates of
BRegion internal data are now exclusive! I inherited that from the
XOrg implementation and didn't feel like changing the code, seeing it
is probably tested quite well. The conversion is handled transparently.

Secondly, constructing a BRegion with just one rect is not invoking
malloc anymore for the member data, this makes it much more efficient
to use temporary BRegions with just one rect, both externally and internally
in the BRegion implementation.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@21665 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-07-19 17:06:28 +00:00
Ingo Weinhold
ccaa095f9c <malloc.h> ain't a standard header. Should fix the build on platforms that
don't have it.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@21546 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-07-03 14:17:03 +00:00
Michael Lotz
5dc45eb4fe * Unified handling of different BMessage formats into MessageAdapter.cpp
* Removed r5_message.cpp and dano_message.cpp accordingly
* Also moved out KMessage handling from Message.cpp to MessageAdapter.cpp
* Fixed some minor style issues in Message.cpp

git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@21514 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-06-27 20:22:53 +00:00
Axel Dörfler
d2d8f91af5 Fixed copy&paste bug, thanks Stippi for noticing!
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@21506 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-06-25 23:48:47 +00:00
Axel Dörfler
b418398455 * Removed _GetWindowList()
* _WindowAt() and _CountWindows() now have an individual version of that
  code which should be magnitudes faster.
* _WindowQuitLoop() no longer handles hidden windows specially - instead,
  it now walks the window list in the correct direction which should fix
  the issues.
* Also, it now uses WindowAt() and thus has an up-to-date view of the
  window list (it will no longer ignore new windows).
* And finally, it will no longer dereference an unsafe pointer (for
  BWindow::IsFilePanel()).


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@21505 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-06-25 23:38:45 +00:00
Stephan Aßmus
82d0e2c2b5 * do not ask hidden windows if they want to quit (not to be confused with
minimized windows, those need to be asked of course)
* added some comments about why this code is a little flawed but works anyways

NOTE: I really wonder wether traversing the window list in reverse is correct


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@21501 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-06-24 11:43:48 +00:00
Axel Dörfler
618b37dc46 Fixed various incorrect uses of the erase() method of several STL containers I introduced before. Thanks to Stefano for the hint!
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@21332 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-06-05 17:45:02 +00:00
Stefano Ceccherini
2f03d0e0ed Changed the loops in BHandler::_SendNotices() and ::_ValidateHandlers().
See also r20183.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@21331 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-06-05 13:15:45 +00:00
Axel Dörfler
4cad5aba3b Made IsTargetLocal() a lot faster by using BPrivate::current_team() which caches the team ID.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@21104 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-05-10 09:17:51 +00:00
Jérôme Duval
94f814b32c fHandlerToken can be equal to B_PREFERRED_TOKEN
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@21096 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-05-09 23:16:19 +00:00
Axel Dörfler
4231541414 * Implemented atomic commit support to the clipboard as described by #1187.
* Cleanup.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@20919 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-04-30 10:50:15 +00:00
Ingo Weinhold
ca615cfc7a BRoster::Launch() didn't send a B_SILENT_RELAUNCH message to an already
running app. Fixes bug #1162.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@20743 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-04-18 02:15:19 +00:00
Jérôme Duval
38220fb0e5 fix ServerLink::ReadShape and ServerLink::AttachShape for empty shapes
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@20517 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-04-02 22:53:01 +00:00
Ingo Weinhold
2b2ec4382a * Moved the AutoLocker class out of the kernel/utils/AutoLock.h header
into its own shared/AutoLocker.h. It can be used by userland code too.
* Removed headers/private/shared/ObjectLocker.h and replaced all uses of
  BObjectLocker by AutoLocker.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@20432 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-03-27 12:05:33 +00:00
Ingo Weinhold
eb9b19800b Fixed gcc 4(.1.2) build problems.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@20320 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-03-04 05:00:40 +00:00
Axel Dörfler
cf2aeb201f * Implemented BDragger::{Show|Hide}AllDraggers() and its backend in the app_server.
This fixes bug #242. The value is currently stored in a separate file.
* Removed some unused codes from ServerProtocol.h.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@20188 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-02-21 07:57:21 +00:00
Stefano Ceccherini
11ef32dfa9 erase() shrinks the vector, so we decrement the handler. Fixes the crash in case there are invalid handlers (Time application, for example). Should be fixed in the other _SendNotices() call too ?
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@20183 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-02-20 16:25:15 +00:00
Ingo Weinhold
7b95cc638b The BRoster initialization (contacting the registrar) can now time out
(generous 1s for delivery and for reply). This allows for the registrar
main thread to be debugged. Before the libbe initialization in gdb would
block, since it constructed the global be_roster which waited forever for
a reply from the registrar.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@20144 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-02-16 16:53:45 +00:00
Ingo Weinhold
cd9660c79a Moved sending the B_NO_REPLY reply from the destructor to the more
general _Clear(), so that the assignment operator and Flatten() will
trigger such a reply as well.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@20083 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-02-06 17:30:54 +00:00
Ingo Weinhold
c1c0c22091 * In the BMessage assignment operator we do now clear some of the message
header flags after copying the header of the original message. Before
  cloning a message that still needed a reply would result in the clone
  also needing a reply, which, in the end, led to two replies being sent,
  thus screwing up the cached reply ports used for synchronous messaging.
  Fixes bug #1008.
  BTW, also clearing the reply info breaks Tracker and Deskbar, so I suppose
  R5 keeps it and Tracker and Deskbar rely on that behavior.

* Added a bit of debug code removing and printing spurious messages from a
  cached reply port.

* Added TODO in BMessage::~BMessage(). ATM, we only send a B_NO_REPLY in the
  destructor, but not in case the message is overwritten using the
  assignment operator or Flatten().



git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@20074 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-02-05 16:04:46 +00:00
Axel Dörfler
f6c0820638 * The BHandler observer mechanism was completely broken in Haiku for remote targets;
this fixes bug #1005. As a result, the Disks icon will now appear in file panels
  when you change that setting with a panel open.
* _ObserverList is now in the BPrivate namespace (and renamed to ObserverList).
* its BHandler map is now only temporarily used for handlers that do not belong to
  a looper yet; when BHandler::SendNotices() is called, they will be transferred
  into the BMessenger map.
* Invalid messengers are now removed from the map when encountered.
* Added TODO comments about a possible reference counting if a handler is added
  twice to a list (right now, this will be ignored).
* All {Start|Stop}Watching() methods are now more or less safe to be used in low
  memory situations (adding some items to the map can still throw an exception...).
* Renamed BHandler::InitData() to _InitData().
* Some refactoring and cleanup.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@20029 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-02-01 16:08:01 +00:00
Axel Dörfler
f91bf83feb We must not wait for the reply of the registrar - this fixes a deadlock between
the registrar and the app_server.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@20013 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-01-29 22:40:29 +00:00
Axel Dörfler
6af9dcbfe5 Another cleanup patch by Vasilis Kaoutsis - thanks!
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@19998 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-01-28 21:35:08 +00:00
Axel Dörfler
9dbe170a69 Implemented direct message passing for local targets; this fixes a deadlock
with PostMessage() in case the message queue is full.
Some notes:
* for synchronous replies, we don't use this mechanism yet, but it could be
  extended to do that as well.
* the code looks so complicated because we need a way to access the looper's
  queue without locking it (to prevent deadlocks); like Dano's solution, I've
  abused BTokenSpace to store a BDirectMessageTarget with a BHandler.
* we also need to decouple the lifetime of a looper's queue from its target,
  as we cannot lock the looper, and therefore, can't guarantee it stays valid
  as long as we're accessing it outside of BLooper.
* init_clipboard() now needs to be done after the global constructors have
  been called - since sending messages now needs gDefaultTokens to be initialized.
  Since this is done per image, it shouldn't cause any troubles, though.
* some minor cleanup, removed unused _msg_cache_cleanup_() and friends.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@19968 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-01-26 13:59:56 +00:00
Axel Dörfler
c01f349e6d Cleanup:
* Got rid of unused BLooper members
* renamed fTaskID to fThread
* Removed private and deprecated AddLooper()/RemoveLooper()/... stuff; BLooper is now
  directly calling BLooperList methods.
* Got rid of extensive and useless comments
* Made a few TODOs more clear
* Merged InitData() and InitData(...) to _InitData(...)
* BLooper::Team() now uses BPrivate::current_team(), sTeamID is gone now.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@19966 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-01-26 12:42:18 +00:00
Axel Dörfler
aa33d0a928 Got rid of the looper ID stuff - it seems nowhere to be used.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@19965 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-01-26 12:11:33 +00:00
Axel Dörfler
88df8322a9 Optimized current_team() - it now uses a static variable to hold the team ID.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@19964 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-01-26 12:05:10 +00:00
Axel Dörfler
ca9b91886d * Added a Dano extension to BMessageQueue: IsNextMessage().
* BLooper::AddMessage() is now using this method to determine wether or not to
  update its looper thread.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@19956 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-01-25 17:08:16 +00:00
Axel Dörfler
e30afed439 As per Ingo's request, I moved calling BRoster::Private::UpdateActiveApp() into
the app_server (and updated all comments that said otherwise).


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@19865 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-01-19 16:41:58 +00:00
Axel Dörfler
c2f641f2e5 Turns out the whole "active app" mechanism in the registrar wasn't used at all; the
Switcher now works as expected.
* Renamed TRoster::ActivateApp() to UpdateActiveApp(), as the app is already activated
  at that point (the registrar only keeps track of it).
* BWindow::DispatchMessage() now calls the new BRoster::Private::UpdateActiveApp()
  method when it receives a B_WINDOW_ACTIVATED message.
* Added BRoster::_UpdateActiveApp() which calls the new B_REG_UPDATE_ACTIVE_APP.
* Removed now unused B_REG_ACTIVATE_APP.
* Minor cleanup.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@19857 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-01-18 17:45:08 +00:00
Ryan Leavengood
252f476782 Added some needed stdio.h includes. I don't know what magic was used to compile
these for other people, but they wouldn't compile for me when building the
app_server test environment.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@19479 a95241bf-73f2-0310-859d-f6bbb57e9c96
2006-12-13 00:15:56 +00:00
Stephan Aßmus
ab12785c61 * I think I finally caught that bug where the test environment crashed
so frequently when unflattening R5 messages (each mouse event arrives
  as an R5 message in the test environment): unflatten_r5_message()
  retrieved the pointer to the message header, but afterwards cleared
  the message... resulting in the header pointer to be invalid.



git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@19412 a95241bf-73f2-0310-859d-f6bbb57e9c96
2006-12-02 11:08:12 +00:00
Axel Dörfler
aa389c6b38 Now sends the B_SILENT_RELAUNCH message if the app is already running and has
no arguments (or doesn't want them). We even already had the correct handler for
B_SILENT_RELAUNCH around :-)


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@19359 a95241bf-73f2-0310-859d-f6bbb57e9c96
2006-11-22 11:36:11 +00:00
Jérôme Duval
3354a9cc67 B_MESSAGE_NOT_UNDERSTOOD is better than B_ERROR for what fields
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@18934 a95241bf-73f2-0310-859d-f6bbb57e9c96
2006-09-25 21:21:28 +00:00
Ingo Weinhold
6bfd06d1ff BRoster::Launch() eventually launches the application in question
in several steps:
1. early pre-registration with the registrar ("I wanna launch the
   app, make sure noone interferes.")
2. load the app image
3. finish pre-registration with the registrar ("I have launched
   the app, here is its team ID.")
4. start app main thread
5. send "on launch" messages to the app (argv, refs, others)

If the app is already running or being launched, 1. fails with a
conclusive error code and returns the team ID and the pre-registration
token of the app. Steps 2 - 4 are skipped and only the messages are
delivered using the team ID returned by 1.

This change fixes a race condition: The failed early pre-registration
request obviously cannot return the team ID, if the other thread
launching the app has not finished step 3 yet. Thus the argv/refs
message would not get delivered and Launch() would not return the
correct team ID.

Now we wait for the pre-registration to be finished in this case, using
the former _IsAppPreRegistered() mechanism, which already provided
such a waiting feature for one request. It has been extended to
accomodate an arbitrary number of waiting requests and renamed to
_IsAppRegistered().

This fixed bug #763.



git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@18728 a95241bf-73f2-0310-859d-f6bbb57e9c96
2006-08-31 17:54:16 +00:00
Axel Dörfler
1c1c6688d1 Make sure "otherTeam" is -1 when it's not found in the reply.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@18709 a95241bf-73f2-0310-859d-f6bbb57e9c96
2006-08-30 16:15:57 +00:00
Ingo Weinhold
9ecf9d1c1d Merge from layout management branch.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@18649 a95241bf-73f2-0310-859d-f6bbb57e9c96
2006-08-26 16:21:15 +00:00
Jérôme Duval
67bdea52ce hope no one minds with this Dano-like version of BMessage::PrintToStream()
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@18089 a95241bf-73f2-0310-859d-f6bbb57e9c96
2006-07-10 20:00:07 +00:00
Axel Dörfler
d134f89267 * Sending a forwarded message that had required a synchronous reply, can now be sent
again with a synchronous reply - the "reply done" flag wasn't cleared before sending.
* Improved error message in case the buffer for flattening the message couldn't be
  allocated. BTW this would be a good place to use the new writev_port() function and
  don't do any allocation at all.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@17914 a95241bf-73f2-0310-859d-f6bbb57e9c96
2006-06-23 14:44:21 +00:00
Jérôme Duval
3a59f3e4af should have been cur, dunno how it built before ...
fixed bug #661


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@17841 a95241bf-73f2-0310-859d-f6bbb57e9c96
2006-06-14 19:36:10 +00:00
Jérôme Duval
a58450492a now handles also the case when all specifiers are solved, and behaves as if we were asked the Messenger
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@17837 a95241bf-73f2-0310-859d-f6bbb57e9c96
2006-06-14 12:40:27 +00:00