Andreas Kling
daa1dcb5e8
FileManager: Use a GTextEditor for the location bar + tweak icons.
2019-03-20 18:12:56 +01:00
Andreas Kling
951377e93e
GTableView: Add ability to hide individual columns at view-level.
...
Use this in IRCClient to hide the "sender" column in the server message view
since everything in that view comes from the "Server" anyway.
2019-03-20 13:36:07 +01:00
Andreas Kling
d17a91f185
Move WindowServer into Servers.
2019-03-20 04:34:14 +01:00
Andreas Kling
f47945759b
LibGUI: Make GTableModel a retainable object.
...
It became clear that this class needs to support multiple owners.
2019-03-20 03:27:07 +01:00
Andreas Kling
3ecfde193a
GEventLoop: Quit the event loop on EOF from the WindowServer.
2019-03-20 01:10:52 +01:00
Andreas Kling
9551e2e4b5
LibGUI: Add GScrollableWidget::scroll_to_bottom/top().
2019-03-19 03:09:21 +01:00
Andreas Kling
e15cc4509f
LibGUI: More GInputBox refinements.
...
Fix some GBoxLayout bugs to make the buttons in GInputBox line up better.
There are still some imperfections due to rounding errors.
2019-03-19 03:00:42 +01:00
Andreas Kling
46577a6948
GTextEditor: Fix invalidation glitches in single-line mode.
2019-03-19 02:45:49 +01:00
Andreas Kling
f88e550998
LibGUI: More work on GInputBox.
...
- If the GInputBox has a parent and the parent is a GWindow, center the
input box window within the parent window. This looks quite nice.
- Stop processing events in a nested event loop immediately after it's
been asked to quit.
- Fix GWidget::parent_widget() behavior for non-widget parents.
2019-03-19 02:22:49 +01:00
Andreas Kling
a6538feed1
LibGUI: Add GInputBox for getting a string from a modal dialog.
...
Use this to implement some of the toolbar actions in IRCClient. :^)
2019-03-19 01:41:00 +01:00
Andreas Kling
43304d2adf
WindowServer: Add special treatment for modal windows.
...
While a WSClientConnection has a modal window showing, non-modal windows
belonging to that client are not sent any events.
2019-03-19 00:52:39 +01:00
Andreas Kling
57ff293a51
LibGUI: Implement nested event loops to support dialog boxes.
...
This patch adds a simple GMessageBox that can run in a nested event loop.
Here's how you use it:
GMessageBox box("Message text here", "Message window title");
int result = box.exec();
The next step is to make the WindowServer respect the modality flag of
these windows and prevent interaction with other windows in the same
process until the modal window has been closed.
2019-03-19 00:01:02 +01:00
Andreas Kling
a319641fc4
GIODevice: Remove debug spam.
2019-03-18 15:36:16 +01:00
Andreas Kling
9ad076178a
GIODevice: Add a read_all() that returns a ByteBuffer with all we can read.
...
Use this to implement file opening in TextEditor.
2019-03-18 14:38:30 +01:00
Andreas Kling
8e3d0a23d5
LibGUI: Add GTCPSocket and base class GSocket (inherits from GIODevice.)
...
And use these to do the line-by-line reading automagically instead of having
that logic in IRCClient. This will definitely come in handy.
2019-03-18 14:09:58 +01:00
Andreas Kling
d466f2634d
LibGUI: Add GTableModel::Role::ForegroundColor.
...
This makes it possible to specify the text color for each table cell.
Use this to make the IRCClient show unread window list items in red.
2019-03-18 04:54:07 +01:00
Andreas Kling
77a782a67e
LibGUI: Don't crash if calling GClipboard::set_data() with a null string.
2019-03-18 02:59:08 +01:00
Andreas Kling
ce7017e1ec
LibGUI: Add GFile and base class GIODevice.
...
Working with the LibC API's is tedious, so let's add some comfy C++ API's.
2019-03-17 15:54:43 +01:00
Andreas Kling
4e451c1e92
Add client-side double buffering of window backing stores.
...
This prevents flicker and looks rather good. The main downside is that
resizing gets even more sluggish. That's the price we pay for now.
2019-03-17 04:23:54 +01:00
Andreas Kling
0f49b5e7be
LibGUI: Ignore GWindow::update() with an empty rect.
2019-03-17 01:36:38 +01:00
Andreas Kling
01a2035ecf
LibGUI: Don't nap in event loop if there are already queued events.
...
This mirrors the WindowServer fix.
2019-03-17 01:34:31 +01:00
Andreas Kling
ec8bffb06d
LibGUI: Let GTextEditor deal with its horizontal padding internally.
...
I originally wanted to have the padding concept in GScrollableWidget
but it's really finicky with the ruler and everything.
2019-03-16 23:16:37 +01:00
Andreas Kling
3854e752cb
LibGUI: Make GTextEditor inherit from GScrollableWidget.
...
This is quite nice, now we can share a ton of logic. :^)
2019-03-16 16:54:51 +01:00
Andreas Kling
6fbabac460
LibGUI: Factor out scrolling logic from GTableView into a GScrollableWidget.
...
This then becomes the base class for GTableView. I'd like to share as much
code as possible with GTextEditor and any other scrollable widgets.
2019-03-16 16:03:31 +01:00
Andreas Kling
eb610b309e
LibGUI: Make class_name() public so you can always call it.
...
I found myself having to cast to GWidget* all the time when writing some
generic debugging code that just wanted to dump widget info.
2019-03-16 12:57:04 +01:00
Andreas Kling
5c2d405e1f
IRCClient: Add menus.
2019-03-16 01:10:48 +01:00
Andreas Kling
3a3aa74b2e
IRCClient: Add a toolbar with some actions.
2019-03-15 23:24:40 +01:00
Andreas Kling
b54ab06595
GTableView: Add a way to turn off alternating row colors.
2019-03-15 21:41:27 +01:00
Andreas Kling
7e3673f710
GTextEditor: Disable the ruler in single-line mode.
...
Also make it possible to hide the ruler in multi-line mode, if you should
want to do that. :^)
2019-03-15 17:54:05 +01:00
Andreas Kling
1fc283ed7d
IRCClient+LibGUI: Add an input box so we can send messages to channels.
...
Implement this using a GTextEditor with a special single-line mode.
This new mode needs some polishing, but it's already very useful.
2019-03-15 17:37:13 +01:00
Andreas Kling
ad08165a25
LibGUI: Hit testing should skip invisible widgets.
2019-03-15 16:45:27 +01:00
Andreas Kling
a3d5ba8f23
LibGUI: Don't autofill the background of GStackWidget.
2019-03-15 16:44:51 +01:00
Andreas Kling
c1f2f5a153
LibGUI: Add a mode where GTableModel automatically activates on selection.
2019-03-15 16:25:30 +01:00
Andreas Kling
84f5312dc2
LibGUI: Disable GBoxLayout debug spam.
2019-03-15 16:23:12 +01:00
Andreas Kling
497300c492
LibGUI: Add a GStackWidget for many widgets sharing a single location.
...
Call set_active_widget(GWidget*) to put a new widget on top.
2019-03-15 16:12:06 +01:00
Andreas Kling
a5d538b389
GTableView: Add a way to hide the column headers.
...
There are many situations where you would want a table view without headers.
2019-03-15 14:50:36 +01:00
Andreas Kling
aa19735c5a
IRCClient: Start working on a simple graphical IRC client.
...
This will be a nice way to exercise both LibGUI and the TCP/IP support. :^)
2019-03-15 12:14:23 +01:00
Andreas Kling
ce7c302933
Kernel: Oops, gettimeofday()'s tv_usec should be micro, not milliseconds.
2019-03-13 03:25:18 +01:00
Andreas Kling
10dcd3a47f
GTextEditor: Make sure the scroll corner helper widget is filled in.
2019-03-11 12:52:07 +01:00
Andreas Kling
5d69bf06d2
LibGUI: Don't fill widgets with background color by defualt.
2019-03-10 13:16:36 +01:00
Andreas Kling
6836e21d1c
ProcessManager: Tidy up the memory stats and align everything nicely.
2019-03-10 12:34:44 +01:00
Andreas Kling
8017c1e17c
GTextEditor: Let the Tab key insert up to 4 spaces.
2019-03-10 11:08:36 +01:00
Andreas Kling
48e4b3e751
LibGUI: Preserve selection when resorting a GSortingProxyTableModel.
2019-03-10 02:13:59 +01:00
Andreas Kling
6c70629a49
LibGUI: Make buttons a little bit sharper.
2019-03-10 00:58:27 +01:00
Andreas Kling
b4a099d212
GTextEditor: Allow jumping lines by hitting Left/Right at start/end of line.
2019-03-09 22:02:35 +01:00
Andreas Kling
76094128e7
LibGUI: Fix small painting glitch in GScrollBar buttons.
2019-03-09 21:51:36 +01:00
Andreas Kling
963e95cb1a
GTableView: Minor painting cleanup.
2019-03-09 21:38:13 +01:00
Andreas Kling
0a7137617d
GTextEditor: Simplify painting of the ruler.
2019-03-09 21:30:16 +01:00
Andreas Kling
b8f999cbef
About+LibGUI: Use a GBoxLayout for the About app.
2019-03-09 21:09:29 +01:00
Andreas Kling
eac3a6ad52
GEventLoop: Make the server fd/pid global, and only connect to server once.
2019-03-09 17:34:09 +01:00