Commit graph

3234 commits

Author SHA1 Message Date
Andreas Kling
3db9706e57 Kernel: Remove unused Alarm.h 2019-07-17 08:40:10 +02:00
Andreas Kling
a17fbd98e7 LibGUI: Add input types to GMessageBox.
Currently the two available input types are:

- GMessageBox::InputType::OK (default)
- GMessageBox::InputType::OKCancel

Based on your choice, GMessageBox::exec() will return ExecOK or ExecCancel.
2019-07-16 21:41:13 +02:00
Andreas Kling
62335c5f0c WindowServer: Spawn a SystemDialog when activating the shutdown menu.
This allows us to ask the user for confirmation instead of just shutting
down the system abruptly.
2019-07-16 21:41:13 +02:00
Andreas Kling
f98b1f635b SystemDialog: Add a new app for showing system dialogs.
Currently this will be used by the WindowServer to show some dialogs.
This is needed since WindowServer can't use LibGUI and reimplementing
message box functionality inside WindowServer would be silly. :^)

The only dialog supported in this initial version is --shutdown
2019-07-16 21:41:13 +02:00
Robin Burchell
825ce53fd3 Piano: Create the connection after the event loop
Otherwise it will crash when registering the CNotifier.
2019-07-16 20:47:32 +02:00
Robin Burchell
d8387f1506 CNotifier: Turn into a CObject and Use the event queue to deliver events
This way, CNotifier can mutate state to its little heart's content
without destroying the world when the global CNotifier hash changes
during delivery.
2019-07-16 20:47:32 +02:00
Robin Burchell
a714fc661d LibCore: Add a way to mark a socket as blocking (or not)
If custom I/O is being done outside CIODevice, we need a way to force blocking sometimes.
This also fixes the default of CLocalSocket to be non-blocking, the same
as CTCPSocket.
2019-07-16 20:22:54 +02:00
Robin Burchell
6aa77d1999 SharedBuffer: Fix deadlock on destroy
We were locking the list of references, and then destroying the
reference, which made things go a little crazy.

It's more straightforward to just remove the per-reference lock: the
syscalls all have to lock the full list anyway, so let's just do that
and avoid the hassle.

While I'm at it, also move the SharedBuffer code out to its own file as it's
getting a little long and unwieldly, and Process.cpp is already huge.
2019-07-16 15:27:46 +02:00
Robin Burchell
d53e54f8bf SharedBuffer: fix nullptr dereference on seal
If the buffer hadn't been used by all participants yet, there wouldn't
be a region, which leads to bad things.
2019-07-16 15:27:46 +02:00
Robin Burchell
7bf420d83d CNotifier: Provide a way to unregister a notifier temporarily 2019-07-16 15:23:57 +02:00
Andreas Kling
3dac1f8ac5 Kernel: Remove use of [[gnu::pure]].
I was messing around with this to tell the compiler that these functions
always return the same value no matter how many times you call them.

It doesn't really seem to improve code generation and it looks weird so
let's just get rid of it.
2019-07-16 13:44:41 +02:00
Andreas Kling
89c6064141 IDEDiskDevice: Remove superstitious memory_barrier(). 2019-07-16 13:41:21 +02:00
Robin Burchell
e922db68d8 CSocket: Also call on_connected for local socket connections 2019-07-16 13:18:37 +02:00
Robin Burchell
14b2f90920 LibCore: Always call on_connected whether the connection was synchronous or not
It's unreasonable to expect the client to have to call it themselves if
the connection was immediate (local).
2019-07-16 13:18:37 +02:00
Robin Burchell
41d2c674d7 AK: Add a new TestSuite.h from my own work, adapted to match the existing one a bit
This gives a few new features:

* benchmarks
* the ability to run individual testcases easily
* timing of tests
2019-07-16 11:03:38 +02:00
Robin Burchell
df3e295ba6 Kernel: SharedBuffer sharing cleanup
Rather than limiting it to two shared processes, store a Vector of
references, so we can add more if we want. Makes the code a little
more generic.

No actual change to the syscall interface yet, so nothing takes
advantage of this yet.
2019-07-16 10:03:14 +02:00
Robin Burchell
6e90f00925 BufferStream: Add a function to fully reset state
This will allow us to reuse the same buffer with the same stream instance.
Needed in AudioServer.
2019-07-16 09:36:38 +02:00
Robin Burchell
2c929c3aa1 BufferStream: Add signed int overloads for read/write
This will be required in AudioServer
2019-07-16 09:36:38 +02:00
rhin123
1f77fbb75c TextEditorWidget: Stop dbgprintf from printing null 2019-07-16 08:34:51 +02:00
rhin123
fdb365856d GFilePicker: Changed file_exists MessageBox to warning
Forgot to remove Error in the title. Going to be replaced by YesNo
GMessagebox in the future.
2019-07-16 08:34:51 +02:00
rhin123
1bcf3968f2 TextEditor: Show window after text_widget loads 2019-07-16 08:34:51 +02:00
Andreas Kling
8075ba5064 LogStream: Add a simple-ish mechanism for colorizing and styling output.
Meet TStyle. It allows you to write things like this:

    dbg() << TStyle(TStyle::Red, TStyle::Bold) << "Hello, friends!";

Any style used will be reset along with the newline emitted when the dbg()
temporary goes out of scope. :^)

This can definitely be improved, but I think it's a decent place to start.
2019-07-15 20:22:30 +02:00
rhin123
82d9410226 TextEditorWidget: Added improved save feature.
Instead of saving to a temp file, the TextEditorWidget now saves
to a path returned by the improved GFilePicker.
2019-07-15 18:33:33 +02:00
Andreas Kling
954a0b8efe AK: Add a canonicalized_path() convenience function.
This is the same as calling FileSystemPath(foo).string(). The majority of
clients only care about canonicalizing a path, so let's have an easy way
to express that.
2019-07-15 06:50:32 +02:00
Robin Burchell
cd497accbe CLocalSocket: Add missing pragma once 2019-07-14 15:29:59 +02:00
Robin Burchell
818a29c964 WSEventLoop: Move message processing into WSClientConnection
Tidier encapsulation than splitting messages between two classes.
2019-07-14 15:29:59 +02:00
Robin Burchell
7b75632e5c AK/LibAudio: Add stream read operators to AK::BufferStream, and use it in AWavLoader
At the same time, we allow chaining of streaming operators, and add a
way to check for partial reads (also used in WAV parsing).
2019-07-14 15:29:59 +02:00
Robin Burchell
3792883219 AK: Remove some superstition from BufferStream :) 2019-07-14 15:29:59 +02:00
Andreas Kling
e78097d140 SB16: Set "m_interrupted" to false before enabling IRQ's.
Otherwise, we might get interrupted before entering wait_for_irq() and then
resetting the flag again.
2019-07-14 15:02:02 +02:00
Andreas Kling
b2e502e533 Kernel: Add Thread::block_until(Condition).
Replace the class-based snooze alarm mechanism with a per-thread callback.
This makes it easy to block the current thread on an arbitrary condition:

    void SomeDevice::wait_for_irq() {
        m_interrupted = false;
        current->block_until([this] { return m_interrupted; });
    }
    void SomeDevice::handle_irq() {
        m_interrupted = true;
    }

Use this in the SB16 driver, and in NetworkTask :^)
2019-07-14 14:54:54 +02:00
Andreas Kling
e8d61bb8c0 CEventLoop: Oops, I had the pipe reader/writer fd's mixed up. 2019-07-14 14:28:24 +02:00
Andreas Kling
4c0c93ce09 LibCore: Oops, fix infinite recursion in LogStream << CSocketAddress. 2019-07-14 14:24:37 +02:00
Andreas Kling
3073ea7d84 Kernel: Add support for the WSTOPPED flag to the waitpid() syscall.
This makes waitpid() return when a child process is stopped via a signal.
Use this in Shell to catch stopped children and return control to the
command line. :^)

Fixes #298.
2019-07-14 11:35:49 +02:00
Andreas Kling
de03b72979 LibC: Add WIFSTOPPED() macro in <sys/wait.h>. 2019-07-14 11:31:53 +02:00
Andreas Kling
c9ee481cdf LibCore: Port CSocket over to using dbg().
Also added a LogStream operator<< for CSocketAddress.
2019-07-14 11:02:40 +02:00
Andreas Kling
b4329a8eec CObject: Add LogStream operator<< for CObject. 2019-07-14 10:59:26 +02:00
Andreas Kling
2a9b627ae9 Piano: Use CObject::custom_event() to simplify PianoWidget a bit. 2019-07-14 10:28:10 +02:00
Andreas Kling
a634fab3c4 CObject: Add custom_event() virtual.
This way you can just override custom_event() to catch CCustomEvent instead
of having to filter the entire event stream with event(). :^)
2019-07-14 10:27:27 +02:00
Andreas Kling
1ecb7462b7 Piano: Use CEventLoop::wake() to trigger repaint from sound thread.
In order to repaint the GUI after the sound thread has produced some sweet
new waves, we post a CCustomEvent to the main thread's event loop and then
wake up that event loop via CEventLoop::wake().
2019-07-14 10:22:28 +02:00
Andreas Kling
17ee548bcd CEventLoop: Add wake(), a mechanism for waking up when blocked in select().
This patch generalizes the concept used in Piano to wake up the event loop
so it can react to something happening on a secondary thread.
Basically, there's a pipe who is always part of the file descriptor set we
pass to select(), and calling wake() simply writes a little to that pipe.
2019-07-14 10:20:57 +02:00
Andreas Kling
f1d6a37d5d LibCore: Add CThread, a simple thread abstraction object.
Currently this is only a simple wrapper around create_thread() that
remembers the thread ID of the spawned thread.
2019-07-14 10:19:51 +02:00
Andreas Kling
ad7ec2bbc7 Kernel: Make the create_thread() syscall return the new thread ID. 2019-07-14 10:17:58 +02:00
Robin Burchell
0a1bd03f1d WindowServer: Add a custom window type for Launcher
This keeps it out of the taskbar window list.
The stacking order is a little gnarly, but it seems to work OK still.
2019-07-14 00:06:47 +02:00
Robin Burchell
bee4544192 WSEventLoop: Treat invalid window types the same as unknown window types
And forcefully disconnect the client in both cases.
2019-07-14 00:06:47 +02:00
Andreas Kling
559a999852 Piano: Use a fixed-width font in the UI to align things nicely. 2019-07-13 23:14:00 +02:00
Andreas Kling
9197cfc62f Piano: Add 16x16 window icon. 2019-07-13 23:12:40 +02:00
Andreas Kling
3eeb0734ba Piano: Remove some unused code. 2019-07-13 23:02:07 +02:00
Andreas Kling
173edcc5ae Piano: Add to Launcher with a new 32x32 icon. :^) 2019-07-13 23:01:47 +02:00
Andreas Kling
69bafd1043 Build: Make sure we build LibAudio before AudioServer :^) 2019-07-13 22:58:36 +02:00
Robin Burchell
ffa8cb668f AudioServer: Assorted infrastructure work
* Add a LibAudio, and move WAV file parsing there (via AWavFile and AWavLoader)
* Add CLocalSocket, and CSocket::connect() variant for local address types.
  We make some small use of this in WindowServer (as that's where we
  modelled it from), but don't get too invasive as this PR is already
  quite large, and the WS I/O is a bit carefully done
* Add an AClientConnection which will eventually be used to talk to
  AudioServer (and make use of it in Piano, though right now it really
  doesn't do anything except connect, using our new CLocalSocket...)
2019-07-13 22:57:24 +02:00