#Sunstone #browser grew a vertical tab bar over the past two days. Tabs appear in the first pane in the sidebar. There are a couple of limitations so far. Tabs can't yet be reordered from this pane, and if you reorder your tabs using either the tab overview or the regular horizontal tab bar, the changes will not be mirrored in the vertical tab bar. Both are on the TODO list. Still, progress. This was a feature that I loved from the moment it was added to Firefox, and I was missing it. It doesn't work quite as nicely as the Firefox implementation (yet) in that you can't set the sidebar to automatically expand on mouseover and collapse when leaving it. I'll play around with the design a bit more and see what can be done, particularly since I know how to do mouseover actions in Gtk now.

There was also a bug where downloading a file would open multiple progress bars in the download manager, and also send multiple notifications upon completion. This is now fixed. The clue was that there were as many rows/notifications as there were tabs opened since the program was started. Turns out I was adding a callback to the global network session for each tab as it was instantiated. This is now done per-window instead. Because WebKit shares a common network session for all web views, downloads created in one window will show up in the download manager of every window. I think I can live with that behavior, and it is certainly an improvement over what had been happening.

Some fairly big #Sunstone #browser feature implementations today.

Bookmarks can be displayed at the 'sunstone://bookmarks/' uri. Clicking on the tag buttons for each bookmark card will bring up a page with all bookmarks that have that tag. There is also a search entry, which by default will search within the bookmark's name, alias, description, and url. This doesn't yet work from within a tag page, but that shouldn't take too much of a rafactor to implement.

Because the search is implemented using the 'get' method, the search query is appended to the url. Technically, this could be added as a search engine the same way other search engines are added. I need to start writing some good documentation.

I've learned a lot doing this. One thing I am not, and never claimed to be, is a web designer. But these features require creating web pages on the fly programatically, adding a custom scheme handler to WebKit, and even some css. No javascript so far.

History is going to be implemented in much the same way, but with a lot more search parameters that can be set by the user. Some of the work done so far will support the history page nicely. The handler already breaks the query string down and stores key/value pairs in a hashmap to be passed to the function which generates the page.

There's a fairly significant amount of code cleanup to be done around this last bit of hacking. For instance, originally I had a few different html templates for various uses, but I've knocked that down to one. I'll need to remove the orphans from the repository.

I'm experimenting with a mini titlebar in #Sunstone for when the main controls are hidden. It's just big enough to give you a handle to move the windows around, with the title in the center. Clicking the title beings to the controls and focuses the address bar, hitting escape hides the controls again. So far I like it. If a new user accidentally hides the controls they can get them back with one click. I'll probably add a button on the left to open the sidebar, and some windows control buttons on the right.

Thinking I'll make it configurable, and also add an option to hide it when the widow is maximized.

This comes along with using client side decorations, so I'll be adding widow controls to the existing header bar as well. Might move things around slightly depending on how busy it looks after.

#Sunstone #browser now remembers your open tabs when you close it and re-opens them the next time you launch it. Another task knocked off the todo list.

#Sunstone #browser grew a couple of features over the past two days.

- History
This is in the same `places` database as bookmarks. For the time being, there is no interface for browsing history or deleting entries. I've added two settings, max_entries and max_days. Every fifteen minutes a background job runs at low priority to clear and history beyond what those two settings allow. There are a lot of plans for how history is going to be displayed such as grouping visits by host and deleting items from arbitrary ranges of time.

- Address bar completions
Whatever you type into the address bar is now saved and used as entry completions. This was something I was having a hard time living without while dogfooding the browser as my daily driver.

There was a lot of code cleanup and refactoring done in the past couple of days as well. Most of the Sql used to access the places database is stored as snippets in the GResources vfs.

#Vala #Programming #Gtk

https://codeberg.org/jeang3nie/sunstone

sunstone

The Sunstone web browser

Codeberg.org

I spent a few hours today rethinking the schema for the bookmarks database in #Sunstone . The result is better functionality in less code, which is hopefully a lot less brittle. This database is also going to be used for history, and it's tied in to parsing address bar queries, so it's definitely worth getting it right before going too much further.

Next steps are going to be displaying bookmarks in list form in the sidebar, followed by serving a bookmarks page at the uri sunstone://bookmarks. Since the bookmarks are organized by tags, each tag will be available as a subfolder of that url (eventually).

It was a better day than I expected. My younger son came over and visited for a few hours. He's starting a new job at KSU tomorrow, so he'll be working really close to where I live and we might be seeing a lot more of him going forward.

#Sunstone #Browser got a few nice quality of life improvements today.

- A slim progress bar at the top of the WebView to display loading progress
- Page zoom via keyboard shortcuts. Currently there is no user feedback to display the zoom level because I still need to decide where to fit that into the interface and how it should look.
- You can create bookmarks now via the bookmark editor, called up via the button just to the right of the address bar. Some limitations apply (more on that below).
- You can visit a bookmark just by typing its name or alias into the address bar. This is similar to the 'quickmarks' feature in Qutebrowser, except integrated right into the bookmarking system. It's quite handy - I came here by opening the browser, hitting Ctrl/g to focus the address bar entry and typing 'slp [Enter]'. That's five keystrokes after opening the browser and no touching the mouse.

I had been playing around with a custom data structure for storing and quickly looking up bookmarks, but I've decided to go easy mode and just use an sqlite database. I'm considering doing the same for history so that I can store more context for history items, but I digress. Sunstone is going to organize your bookmarks via tags instead of folders, which should make it quick and easy to find old bookmarks by topic. The database has a table for Bookmarks and a table for Tags. The current limitation with the editor is that when you update an existing bookmark and change it's tags, the tags table isn't updated. I just need to get around to writing the logic to handle that properly. I also think it wise to state that the current bookmark schema may change.

Currently there is nowhere in the interface to display bookmarks. I'm planning on having two different views for that, one in the sidebar and one as a webpage with the sunstone://bookmarks/ uri. The plan is to also integrate bookmark names, url's and aliases into completion for the address bar.

https://codeberg.org/jeang3nie/sunstone

sunstone

The Sunstone web browser

Codeberg.org

Had some fun little bugs to hunt down while working on #Sunstone last night that show me just how out of practice I am. The DownloadManager widget has a grid-based layout and maintains a list of DownloadRow objects using an ArrayList courtesy of libgee. When the "Clear" button is pressed, the idea was for it to go through the list and remove any DownloadRow objects that are finished, failed, or canceled. It kept crashing.

Here's the thing I don't always like about "nice" programming interfaces that give you useful data structures like dynamically sized arrays. The moment you remove an item from an ArrayList, libgee moves all of the other following items back by one. The iterator is now invalidated. The code compiles of course, but it crashes because the internal array is now smaller and it tries to read past the end.

I should have understood the problem a lot earlier. I'm rusty because I'm spending so much time on schoolwork, ironically for a computer science degree, that I hardly spend any time programming anymore.

I've renamed my web browser project from SWB to Sunstone.

The sunstone was a translucent mineral prized by Viking navigators because it had a natural property that polarized light, making it possible to see through the haze and find the sun on a hazy day - quite common in the North Atlantic. I liked the connection to a primitive navigation tool.

Some code progress:
- Downloads are displayed in a grid form inside a popup menu with a progress bar
- I've added a (non-functional) bookmark editor button next to the address bar. Bookmarks should be coming fairly soon.
- If the tab bar or the command bar are hidden, those settings now persist across sessions.
- When the tab bar is hidden, the tab overview button is shown and the new tab button is hidden. You can still create a new tab from the button in the overview or from 'Ctrl/t'. Keeps the interface cleaner.

#WebBrowser #sunstone #programming #Vala #Gtk

https://codeberg.org/jeang3nie/sunstone

Ignite your passions and inspire love with one of our Orange & Green Sunstone Tumbled Gemstones. These Grade-A gemstones feature both the orange and the rare green varieties of sunstone to help you express yourself with authenticity.

https://www.inkedgoddesscreations.com/products/orange-green-sunstone-tumbled-gemstone
#Sunstone #Fire #SelfExpression #Passion #Love #Balance #Crystal #Mineral #Gemstone #Magick