Up to Lgi...
About
Changes:
- [Linux] Fixed GView::Focus() returning the wrong value sometimes.
- [Win32] Fixed GView::NameW(char16*) not invalidating the window, and thus updating the display.
- [Win32] Fixed virtual GView's painting even when not Visible().
- [Win32] Copied the x-platform GText control over the Win32 control so that it supports glyph substitution on all platforms.
- Fixed a GDisplayString measurement issue when the previous string was drawn in a different point size and the first char of the new string was substituted from another font.
- Made the menus store display strings to cache the layout info. Speeds up menu display at the expense of a little memory.
- [Win32] Changed the radio group + button, checkbox and text label to be cross platform owner-drawn controls instead of Win32 controls so that they'd work with unicode correctly on older Windows versions (pre XP).
- [Win32] Fixed menu accelerators to accept 'modifier-key' as well as 'modifier+key'.
- [Linux] Fixed GView::Invalidate getting stuck in an infinite loop if you used the repaint in a GView::OnPaint handler.
- Added a private data class to GButton. Fixed it triggering when it just receives an "up" key message without the "down". This helps when the down was actually on another window, which then lost focus (because the button was triggered) and a new window is displayed only to be dismissed up the up event on the default button straight away. Which was not the intent of the user.
- Renamed some global statics in the GView class so that they don't conflict with common class member names.
- Moved the GButton class into it's own file. Made it use display strings for cached text layout.
- [Linux] Changed mouse click processing to consider 2 clicks more than 4 pixels away from each other but under the double click timeout to NOT be a double click. Generally the user doesn't mean double click unless the mouse is relitively still.
- [Linux] Fixed drawing Xft text into GMemDC bitmaps that are of different depth to the current screen depth.
- Fixed a layout bug in the splitter control when there is no room for a pane to display is child.
- Cleaned up some of the core headers. Removing ugly dependencies and putting things in the right place.
- Added hooks for a skinning library to draw the controls. Implemented alternate looks for GButton and GListColumn. The skin engine is loaded from an external DLL at startup and is optional.
- Expanded GApp::GetOption to check for multi-character options (ie 'abc' instead of 'a').
- Cleaned up the processing of socket disconnections so that OnDisconnect is not called twice.
- Once a GSocketImpl connection is dropped, the API fuctions now cease call the OS api to try and do things with the socket.
- The IFtp class now ignores calls to do things with the connection after the socket has closed. It also exits out of loops more cleanly when things go wrong.
- The GList class now protects all calls to it's ::Pour() method with a Lock/Unlock() pair.
- Optimized GList::Remove.
- Made GImageList::Draw double buffer.
- [Linux] Implemented GMemDC::Blt for GScreenDC source surfaces. This calls XGetSubImage to do the real work.
- [Linux] Fixed the GListItem::EditLabel function to look and work correctly. It also handles keyboard processing correctly too, capturing the Enter key and then closing.
- [Linux] Implemented GView::Lock() and GView::Unlock(). Hmmm, exactly how did iFtp work without them again? *sigh*
- [Win32] Fixed the menu background colour in WinXP's "silver" theme.
- [Linux] Fixed GSplitter creating top level windows out of it's children.
- Fixed the tabs on the tab control not drawing text in the colour: LC_TEXT.
- [Linux] Added multiple column layout to the menus if there is too many items to show in one column.
- [Linux] By accessing the /proc file system directly I got the execution time of LgiGetWindowManager() down to 4-5ms instead of ~120ms. It now also caches the result as well.
- [Linux] Shaved some time off the LgiGetOs call by using the uname system call instead of the program uname to return the OS version. Hey I didn't know it came in a syscall version as well! It's gone from ~120ms down to <1ms. Nice eh?