summaryrefslogtreecommitdiff
path: root/LibGUI
AgeCommit message (Collapse)Author
2019-03-17Add client-side double buffering of window backing stores.Andreas Kling
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-17LibGUI: Ignore GWindow::update() with an empty rect.Andreas Kling
2019-03-17LibGUI: Don't nap in event loop if there are already queued events.Andreas Kling
This mirrors the WindowServer fix.
2019-03-16LibGUI: Let GTextEditor deal with its horizontal padding internally.Andreas Kling
I originally wanted to have the padding concept in GScrollableWidget but it's really finicky with the ruler and everything.
2019-03-16LibGUI: Make GTextEditor inherit from GScrollableWidget.Andreas Kling
This is quite nice, now we can share a ton of logic. :^)
2019-03-16LibGUI: Factor out scrolling logic from GTableView into a GScrollableWidget.Andreas Kling
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-16LibGUI: Make class_name() public so you can always call it.Andreas Kling
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-16IRCClient: Add menus.Andreas Kling
2019-03-15IRCClient: Add a toolbar with some actions.Andreas Kling
2019-03-15GTableView: Add a way to turn off alternating row colors.Andreas Kling
2019-03-15GTextEditor: Disable the ruler in single-line mode.Andreas Kling
Also make it possible to hide the ruler in multi-line mode, if you should want to do that. :^)
2019-03-15IRCClient+LibGUI: Add an input box so we can send messages to channels.Andreas Kling
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-15LibGUI: Hit testing should skip invisible widgets.Andreas Kling
2019-03-15LibGUI: Don't autofill the background of GStackWidget.Andreas Kling
2019-03-15LibGUI: Add a mode where GTableModel automatically activates on selection.Andreas Kling
2019-03-15LibGUI: Disable GBoxLayout debug spam.Andreas Kling
2019-03-15LibGUI: Add a GStackWidget for many widgets sharing a single location.Andreas Kling
Call set_active_widget(GWidget*) to put a new widget on top.
2019-03-15GTableView: Add a way to hide the column headers.Andreas Kling
There are many situations where you would want a table view without headers.
2019-03-15IRCClient: Start working on a simple graphical IRC client.Andreas Kling
This will be a nice way to exercise both LibGUI and the TCP/IP support. :^)
2019-03-13Kernel: Oops, gettimeofday()'s tv_usec should be micro, not milliseconds.Andreas Kling
2019-03-11GTextEditor: Make sure the scroll corner helper widget is filled in.Andreas Kling
2019-03-10LibGUI: Don't fill widgets with background color by defualt.Andreas Kling
2019-03-10ProcessManager: Tidy up the memory stats and align everything nicely.Andreas Kling
2019-03-10GTextEditor: Let the Tab key insert up to 4 spaces.Andreas Kling
2019-03-10LibGUI: Preserve selection when resorting a GSortingProxyTableModel.Andreas Kling
2019-03-10LibGUI: Make buttons a little bit sharper.Andreas Kling
2019-03-09GTextEditor: Allow jumping lines by hitting Left/Right at start/end of line.Andreas Kling
2019-03-09LibGUI: Fix small painting glitch in GScrollBar buttons.Andreas Kling
2019-03-09GTableView: Minor painting cleanup.Andreas Kling
2019-03-09GTextEditor: Simplify painting of the ruler.Andreas Kling
2019-03-09About+LibGUI: Use a GBoxLayout for the About app.Andreas Kling
2019-03-09GEventLoop: Make the server fd/pid global, and only connect to server once.Andreas Kling
2019-03-09LibGUI: Use PainterStateSaver in GStyle::paint_button().Andreas Kling
2019-03-09GTextEditor: Use Painter save/restore to simplify.Andreas Kling
2019-03-09AK: Add a basic QuickSort template implementation.Andreas Kling
It was depressing not being able to capture anything when passing a lambda to qsort_r() so let's just have our own QuickSort. I was gonna have to do this eventually anyway. :^)
2019-03-09FileManager: Hook up a GSortingProxyTableModel so we get sorted files. :^)Andreas Kling
The next step here is coming up with a nice way to always put directories ahead of files.
2019-03-09LibGUI: Minor tidying.Andreas Kling
2019-03-09LibGUI: Use a separate data role for the table model sorting order.Andreas Kling
This allows data to be displayed nicely while sorting happens based on some underlying raw data. :^)
2019-03-09GTableView: Allow changing sort options by clicking column headers.Andreas Kling
Also paint the sorted column slightly differently to indicate what's up.
2019-03-09Make it possible to sort a GTableModel by column+order.Andreas Kling
This is accomplished by putting a GSortingProxyTableModel between the model and the view. It's pretty simplistic but it works for this use case. :^)
2019-03-08GTextEditor: Use a subwidget for the scrollbar corner and tighten clipping.Andreas Kling
2019-03-08GTextEditor: Backspace and Delete should work regardless of modifier state.Andreas Kling
2019-03-08GTextEditor: Refactor selection into a GTextRange class.Andreas Kling
This is a bit more expressive than "selection start + current cursor".
2019-03-08LibGUI+WindowServer: Implement drag-to-select behavior in GTextEditor.Andreas Kling
To make this feel right, I needed to start passing keyboard modifiers along with mouse events. That allows shift-clicking to extend the selection. :^)
2019-03-08GTextEditor: Fix text_position_at() behavior when passed negative values.Andreas Kling
2019-03-08GTextEditor: Simplify delete_selection().Andreas Kling
2019-03-08GTextEditor: Ctrl+A should select the entire document.Andreas Kling
2019-03-08GTextEditor: Replace selection on input or Backspace/Delete.Andreas Kling
2019-03-08GTextEditor: Work on cut/copy/paste operations.Andreas Kling
2019-03-08Seal clipboard buffers after copying data into them.Andreas Kling
This is just a quick safety mechanism to ensure that nobody alters the contents of a clipping after it's been set. Ultimately this will be replaced by a more sophisticated SHM object.