X-Git-Url: http://git.chise.org/gitweb/?a=blobdiff_plain;ds=sidebyside;f=src%2Fframe-msw.c;h=f48b7af82bdd09d42475a0ef48b6c2b45d2edfc6;hb=313d1c4d8bd1f94564e5edda76ee6aac3ecb70fd;hp=2b2b10c10ef5e3c708bf27d02e1ed38dd4bcfc31;hpb=77dcef404dc78635f6ffa8f71a803d2bc7cc8921;p=chise%2Fxemacs-chise.git- diff --git a/src/frame-msw.c b/src/frame-msw.c index 2b2b10c..f48b7af 100644 --- a/src/frame-msw.c +++ b/src/frame-msw.c @@ -33,8 +33,10 @@ Boston, MA 02111-1307, USA. */ #include "lisp.h" #include "buffer.h" +#include "elhash.h" #include "console-msw.h" #include "glyphs-msw.h" +#include "elhash.h" #include "events.h" #include "faces.h" #include "frame.h" @@ -128,10 +130,12 @@ mswindows_init_frame_1 (struct frame *f, Lisp_Object props) FRAME_MSWINDOWS_DATA(f)->sizing = 0; FRAME_MSWINDOWS_MENU_HASH_TABLE(f) = Qnil; #ifdef HAVE_TOOLBARS - FRAME_MSWINDOWS_TOOLBAR_HASH_TABLE(f) = Fmake_hash_table (make_int (50), - Qequal); + FRAME_MSWINDOWS_TOOLBAR_HASH_TABLE(f) = + make_lisp_hash_table (50, HASH_TABLE_NON_WEAK, HASH_TABLE_EQUAL); #endif - + /* hashtable of instantiated glyphs on the frame. */ + FRAME_MSWINDOWS_WIDGET_HASH_TABLE (f) = + make_lisp_hash_table (50, HASH_TABLE_VALUE_WEAK, HASH_TABLE_EQUAL); /* Will initialize these in WM_SIZE handler. We cannot do it now, because we do not know what is CW_USEDEFAULT height and width */ FRAME_WIDTH (f) = 0; @@ -177,7 +181,9 @@ mswindows_init_frame_1 (struct frame *f, Lisp_Object props) hwnd = CreateWindowEx (exstyle, XEMACS_CLASS, STRINGP(f->name) ? XSTRING_DATA(f->name) : - (STRINGP(name) ? XSTRING_DATA(name) : XEMACS_CLASS), + (STRINGP(name) ? + (CONST Extbyte*)XSTRING_DATA(name) : + (CONST Extbyte*)XEMACS_CLASS), style, rect_default.left, rect_default.top, rect_default.width, rect_default.height, @@ -248,6 +254,7 @@ mswindows_mark_frame (struct frame *f, void (*markobj) (Lisp_Object)) #ifdef HAVE_TOOLBARS markobj (FRAME_MSWINDOWS_TOOLBAR_HASH_TABLE (f)); #endif + markobj (FRAME_MSWINDOWS_WIDGET_HASH_TABLE (f)); } static void @@ -301,10 +308,10 @@ mswindows_set_frame_position (struct frame *f, int xoff, int yoff) static void mswindows_make_frame_visible (struct frame *f) { - if (f->iconified) + if (!FRAME_VISIBLE_P(f)) ShowWindow (FRAME_MSWINDOWS_HANDLE(f), SW_RESTORE); else - ShowWindow (FRAME_MSWINDOWS_HANDLE(f), SW_SHOWNORMAL); + ShowWindow (FRAME_MSWINDOWS_HANDLE(f), SW_SHOW); f->visible = 1; f->iconified = 0; } @@ -312,8 +319,11 @@ mswindows_make_frame_visible (struct frame *f) static void mswindows_make_frame_invisible (struct frame *f) { + if (!FRAME_VISIBLE_P(f)) + return; + ShowWindow (FRAME_MSWINDOWS_HANDLE(f), SW_HIDE); - f->visible = -1; + f->visible = 0; } static int @@ -393,6 +403,10 @@ mswindows_set_frame_pointer (struct frame *f) { SetClassLong (FRAME_MSWINDOWS_HANDLE (f), GCL_HCURSOR, (LONG) XIMAGE_INSTANCE_MSWINDOWS_ICON (f->pointer)); + /* we only have to do this because GC doesn't cause a mouse + event and doesn't give time to event processing even if it + did. */ + SetCursor (XIMAGE_INSTANCE_MSWINDOWS_ICON (f->pointer)); } } @@ -452,7 +466,6 @@ static void mswindows_raise_frame (struct frame *f) { BringWindowToTop (FRAME_MSWINDOWS_HANDLE(f)); - /* XXX Should we do SetWindowForeground too ? */ } static void