ReactOS 0.4.17-dev-1190-g4c812f4
iexplore.c
Go to the documentation of this file.
1/*
2 * ieframe - Internet Explorer main frame window
3 *
4 * Copyright 2006 Mike McCormack (for CodeWeavers)
5 * Copyright 2006 Jacek Caban (for CodeWeavers)
6 *
7 * This library is free software; you can redistribute it and/or
8 * modify it under the terms of the GNU Lesser General Public
9 * License as published by the Free Software Foundation; either
10 * version 2.1 of the License, or (at your option) any later version.
11 *
12 * This library is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15 * Lesser General Public License for more details.
16 *
17 * You should have received a copy of the GNU Lesser General Public
18 * License along with this library; if not, write to the Free Software
19 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
20 */
21
22#define COBJMACROS
23
24#include <stdarg.h>
25
26#include "ieframe.h"
27#include "resource.h"
28
29#include "winuser.h"
30#include "wingdi.h"
31#include "winnls.h"
32#include "ole2.h"
33#include "exdisp.h"
34#include "oleidl.h"
35
36#include "mshtmcid.h"
37#include "shellapi.h"
38#include "winreg.h"
39#include "shlwapi.h"
40#include "intshcut.h"
41#include "ddeml.h"
42#include "ieautomation.h"
43
44#include "wine/debug.h"
45
47
48#define IDI_APPICON 1
49
50#define WM_UPDATEADDRBAR (WM_APP+1)
51
52static const WCHAR szIEWinFrame[] = { 'I','E','F','r','a','m','e',0 };
53
54/* Windows uses "Microsoft Internet Explorer" */
56 {'W','i','n','e',' ','I','n','t','e','r','n','e','t',' ','E','x','p','l','o','r','e','r',0};
57
61static struct list ie_list = LIST_INIT(ie_list);
62
64{
66 return E_FAIL;
67
68 return S_OK;
69}
70
71static void adjust_ie_docobj_rect(HWND frame, RECT* rc)
72{
73 HWND hwndRebar = GetDlgItem(frame, IDC_BROWSE_REBAR);
75 INT barHeight = SendMessageW(hwndRebar, RB_GETBARHEIGHT, 0, 0);
76
77 InflateRect(rc, 0, -barHeight);
78
80 {
81 RECT statusrc;
82
83 GetClientRect(hwndStatus, &statusrc);
84 rc->bottom -= statusrc.bottom - statusrc.top;
85 }
86}
87
89{
90 HMENU menu_view = GetSubMenu(menu, 1);
91
92 return GetSubMenu(menu_view, 0);
93}
94
96{
97 return GetSubMenu(menu, 2);
98}
99
101{
103
104 item.cbSize = sizeof(item);
105 item.fMask = MIIM_DATA;
106
107 if(!GetMenuItemInfoW(menu, id, FALSE, &item))
108 return NULL;
109
110 return (LPWSTR)item.dwItemData;
111}
112
114{
115 LPWSTR url;
116 int i;
117
119 free( url );
120}
121
123{
125 int count = 0;
126 int i;
127
128 item.cbSize = sizeof(item);
129 item.fMask = MIIM_DATA | MIIM_SUBMENU;
130
131 for(i = 0; GetMenuItemInfoW(menu, i, TRUE, &item); i++)
132 {
133 if(item.hSubMenu)
134 count += get_menu_item_count(item.hSubMenu);
135 else
136 count++;
137 }
138
139 return count;
140}
141
143{
145 /* Subtract the number of standard elements in the Favorites menu */
146 int favcount = get_menu_item_count(favmenu) - 2;
147 LPWSTR urlbuf;
148
150 {
151 FIXME("Add support for more than %d Favorites\n", favcount);
152 return;
153 }
154
155 urlbuf = malloc((wcslen(url) + 1) * sizeof(WCHAR));
156
157 if(!urlbuf)
158 return;
159
160 lstrcpyW(urlbuf, url);
161
162 item.cbSize = sizeof(item);
164 item.fType = MFT_STRING;
165 item.dwTypeData = title;
166 item.wID = ID_BROWSE_GOTOFAV_FIRST + favcount;
167 item.dwItemData = (ULONG_PTR)urlbuf;
169}
170
172{
173 static const WCHAR search[] = {'*',0};
176 HANDLE findhandle;
177 WIN32_FIND_DATAW finddata;
178 IUniformResourceLocatorW* urlobj;
179 IPersistFile* urlfile = NULL;
180 HRESULT res;
181
182 lstrcpyW(path, dir);
184
185 findhandle = FindFirstFileW(path, &finddata);
186
187 if(findhandle == INVALID_HANDLE_VALUE)
188 return;
189
190 res = CoCreateInstance(&CLSID_InternetShortcut, NULL, CLSCTX_INPROC_SERVER, &IID_IUniformResourceLocatorW, (PVOID*)&urlobj);
191
192 if(SUCCEEDED(res))
193 res = IUnknown_QueryInterface((IUnknown*)urlobj, &IID_IPersistFile, (PVOID*)&urlfile);
194
195 if(SUCCEEDED(res))
196 {
198
199 do
200 {
201 lstrcpyW(filename, finddata.cFileName);
202
204 {
205 static const WCHAR ignore1[] = {'.','.',0};
206 static const WCHAR ignore2[] = {'.',0};
208
209 if(!lstrcmpW(filename, ignore1) || !lstrcmpW(filename, ignore2))
210 continue;
211
212 item.cbSize = sizeof(item);
213 item.fMask = MIIM_STRING | MIIM_SUBMENU;
214 item.dwTypeData = filename;
215 item.hSubMenu = CreatePopupMenu();
217 add_favs_to_menu(favmenu, item.hSubMenu, path);
218 } else
219 {
220 static const WCHAR urlext[] = {'.','u','r','l',0};
221 WCHAR* fileext;
222 WCHAR* url = NULL;
223
225 continue;
226
227 if(FAILED(IPersistFile_Load(urlfile, path, 0)))
228 continue;
229
230 urlobj->lpVtbl->GetURL(urlobj, &url);
231
232 if(!url)
233 continue;
234
235 fileext = filename + lstrlenW(filename) - lstrlenW(urlext);
236 *fileext = 0;
237 add_fav_to_menu(favmenu, menu, filename, url);
238 }
239 } while(FindNextFileW(findhandle, &finddata));
240 }
241
242 if(urlfile)
243 IPersistFile_Release(urlfile);
244
245 if(urlobj)
246 IUnknown_Release((IUnknown*)urlobj);
247
248 FindClose(findhandle);
249}
250
252{
253 static const WCHAR toolbar_key[] = {'S','o','f','t','w','a','r','e','\\',
254 'M','i','c','r','o','s','o','f','t','\\',
255 'I','n','t','e','r','n','e','t',' ',
256 'E','x','p','l','o','r','e','r','\\',
257 'T','o','o','l','b','a','r',0};
258 HUSKEY toolbar_handle;
259
260 if(SHRegOpenUSKeyW(toolbar_key, KEY_READ, NULL, &toolbar_handle, TRUE) == ERROR_SUCCESS)
261 {
262 static const WCHAR classes_key[] = {'S','o','f','t','w','a','r','e','\\',
263 'C','l','a','s','s','e','s','\\','C','L','S','I','D',0};
264 HUSKEY classes_handle;
265 WCHAR guid[39];
266 DWORD value_len = ARRAY_SIZE(guid);
267 int i;
268
269 if(SHRegOpenUSKeyW(classes_key, KEY_READ, NULL, &classes_handle, TRUE) != ERROR_SUCCESS)
270 {
271 SHRegCloseUSKey(toolbar_handle);
272 ERR("Failed to open key %s\n", debugstr_w(classes_key));
273 return;
274 }
275
276 for(i = 0; SHRegEnumUSValueW(toolbar_handle, i, guid, &value_len, NULL, NULL, NULL, SHREGENUM_HKLM) == ERROR_SUCCESS; i++)
277 {
278 WCHAR tb_name[100];
279 DWORD tb_name_len = ARRAY_SIZE(tb_name);
280 HUSKEY tb_class_handle;
282 LSTATUS ret;
283 value_len = ARRAY_SIZE(guid);
284
285 if(lstrlenW(guid) != 38)
286 {
287 TRACE("Found invalid IE toolbar entry: %s\n", debugstr_w(guid));
288 continue;
289 }
290
291 if(SHRegOpenUSKeyW(guid, KEY_READ, classes_handle, &tb_class_handle, TRUE) != ERROR_SUCCESS)
292 {
293 ERR("Failed to get class info for %s\n", debugstr_w(guid));
294 continue;
295 }
296
297 ret = SHRegQueryUSValueW(tb_class_handle, NULL, NULL, tb_name, &tb_name_len, TRUE, NULL, 0);
298
299 SHRegCloseUSKey(tb_class_handle);
300
301 if(ret != ERROR_SUCCESS)
302 {
303 ERR("Failed to get toolbar name for %s\n", debugstr_w(guid));
304 continue;
305 }
306
307 item.cbSize = sizeof(item);
308 item.fMask = MIIM_STRING;
309 item.dwTypeData = tb_name;
311 }
312
313 SHRegCloseUSKey(classes_handle);
314 SHRegCloseUSKey(toolbar_handle);
315 }
316}
317
319{
321 HMENU favmenu = get_fav_menu(menu);
323
325
327 add_favs_to_menu(favmenu, favmenu, path);
328
330 add_favs_to_menu(favmenu, favmenu, path);
331
332 return menu;
333}
334
336{
337 VARIANT variant;
338
339 V_VT(&variant) = VT_BSTR;
340 V_BSTR(&variant) = SysAllocString(url);
341
342 IWebBrowser2_Navigate2(&This->IWebBrowser2_iface, &variant, NULL, NULL, NULL, NULL);
343
344 SysFreeString(V_BSTR(&variant));
345}
346
348{
349 static InternetExplorer* This;
350
351 switch(msg)
352 {
353 case WM_INITDIALOG:
356 return TRUE;
357
358 case WM_COMMAND:
359 switch(LOWORD(wparam))
360 {
362 {
364 int len = GetWindowTextLengthW(hwndurl);
365
367 break;
368 }
369 case IDOK:
370 {
372 int len = GetWindowTextLengthW(hwndurl);
373
374 if(len)
375 {
376 VARIANT url;
377
378 V_VT(&url) = VT_BSTR;
380
381 GetWindowTextW(hwndurl, V_BSTR(&url), len + 1);
382 IWebBrowser2_Navigate2(&This->IWebBrowser2_iface, &url, NULL, NULL, NULL, NULL);
383
385 }
386 }
387 /* fall through */
388 case IDCANCEL:
390 return TRUE;
391 }
392 }
393 return FALSE;
394}
395
397{
399
401
402 DestroyIcon(icon);
403}
404
405#ifdef __REACTOS__
406static void ie_dialog_properties(HWND hwnd)
407{
408 ShellExecuteW(hwnd, NULL, L"inetcpl.cpl", NULL, NULL, 0);
409}
410#endif
411
413{
414 TBBUTTON btn;
415
416 ZeroMemory(&btn, sizeof(btn));
417
418 btn.iBitmap = 3;
419 btn.fsStyle = BTNS_SEP;
421}
422
423static void add_tb_button(InternetExplorer *ie, int bmp, int cmd, int strId)
424{
425 TBBUTTON btn;
426 WCHAR buf[30];
427
429
430 btn.iBitmap = bmp;
431 btn.idCommand = cmd;
434 btn.dwData = 0;
435 btn.iString = (INT_PTR)buf;
436
438}
439
441{
443}
444
446{
447 HWND hwndRebar;
448 HWND hwndAddress;
449 REBARINFO rebarinf;
450 REBARBANDINFOW bandinf;
451 WCHAR addr[40];
452 HIMAGELIST imagelist;
453 SIZE toolbar_size;
454
456
460
461 rebarinf.cbSize = sizeof(rebarinf);
462 rebarinf.fMask = 0;
463 rebarinf.himl = NULL;
464
465 SendMessageW(hwndRebar, RB_SETBARINFO, 0, (LPARAM)&rebarinf);
466
468 0, 0, 0, 0, hwndRebar, (HMENU)IDC_BROWSE_TOOLBAR, ieframe_instance, NULL);
469
471
472 SendMessageW(ie->toolbar_hwnd, TB_SETIMAGELIST, 0, (LPARAM)imagelist);
482 SendMessageW(ie->toolbar_hwnd, TB_GETMAXSIZE, 0, (LPARAM)&toolbar_size);
483
484 bandinf.cbSize = sizeof(bandinf);
486 bandinf.fStyle = RBBS_CHILDEDGE;
487 bandinf.cxMinChild = toolbar_size.cx;
488 bandinf.cyMinChild = toolbar_size.cy+2;
489 bandinf.hwndChild = ie->toolbar_hwnd;
490
491 SendMessageW(hwndRebar, RB_INSERTBANDW, -1, (LPARAM)&bandinf);
492
494 0, 0, 100,20,hwndRebar, (HMENU)IDC_BROWSE_ADDRESSBAR, ieframe_instance, NULL);
495
496 bandinf.fMask |= RBBIM_TEXT;
497 bandinf.fStyle = RBBS_CHILDEDGE | RBBS_BREAK;
498 bandinf.lpText = addr;
499 bandinf.cxMinChild = 100;
500 bandinf.cyMinChild = 20;
501 bandinf.hwndChild = hwndAddress;
502
503 SendMessageW(hwndRebar, RB_INSERTBANDW, -1, (LPARAM)&bandinf);
504}
505
507{
510
511 This->doc_host.frame_hwnd = This->frame_hwnd = hwnd;
512
513 This->menu = create_ie_menu();
514
517 SendMessageW(This->status_hwnd, SB_SIMPLE, TRUE, 0);
518
520
521 return 0;
522}
523
525{
526 HWND hwndRebar = GetDlgItem(This->frame_hwnd, IDC_BROWSE_REBAR);
527 INT barHeight = SendMessageW(hwndRebar, RB_GETBARHEIGHT, 0, 0);
528 RECT docarea = {0, 0, width, height};
529
530 SendMessageW(This->status_hwnd, WM_SIZE, 0, 0);
531
532 adjust_ie_docobj_rect(This->frame_hwnd, &docarea);
533
534 if(This->doc_host.hwnd)
535 SetWindowPos(This->doc_host.hwnd, NULL, docarea.left, docarea.top, docarea.right, docarea.bottom,
537
538 SetWindowPos(hwndRebar, NULL, 0, 0, width, barHeight, SWP_NOZORDER | SWP_NOACTIVATE);
539
540 return 0;
541}
542
544{
545 NMHDR* hdr = (NMHDR*)lparam;
546
547 if(hdr->idFrom == IDC_BROWSE_ADDRESSBAR && hdr->code == CBEN_ENDEDITW)
548 {
550
551 if(info->fChanged && info->iWhy == CBENF_RETURN)
552 {
553 VARIANT vt;
554
555 V_VT(&vt) = VT_BSTR;
556 V_BSTR(&vt) = SysAllocString(info->szText);
557
558 IWebBrowser2_Navigate2(&This->IWebBrowser2_iface, &vt, NULL, NULL, NULL, NULL);
559
561
562 return 0;
563 }
564 }
565
566 if(hdr->idFrom == IDC_BROWSE_REBAR && hdr->code == RBN_HEIGHTCHANGE)
567 {
568 RECT docarea;
569
570 GetClientRect(This->frame_hwnd, &docarea);
571 adjust_ie_docobj_rect(This->frame_hwnd, &docarea);
572
573 if(This->doc_host.hwnd)
574 SetWindowPos(This->doc_host.hwnd, NULL, docarea.left, docarea.top, docarea.right, docarea.bottom,
576 }
577
578 return 0;
579}
580
582{
584
585 TRACE("%p\n", This);
586
589 This->frame_hwnd = NULL;
590
591 return 0;
592}
593
595{
596 switch(LOWORD(wparam))
597 {
598 case ID_BROWSE_OPEN:
600 break;
601
602 case ID_BROWSE_PRINT:
603 if(This->doc_host.document)
604 {
606
607 if(FAILED(IUnknown_QueryInterface(This->doc_host.document, &IID_IOleCommandTarget, (LPVOID*)&target)))
608 break;
609
610 IOleCommandTarget_Exec(target, &CGID_MSHTML, IDM_PRINT, OLECMDEXECOPT_DODEFAULT, NULL, NULL);
611
612 IOleCommandTarget_Release(target);
613 }
614 break;
615
616 case ID_BROWSE_HOME:
617 IWebBrowser2_GoHome(&This->IWebBrowser2_iface);
618 break;
619
620 case ID_BROWSE_BACK:
621 IWebBrowser2_GoBack(&This->IWebBrowser2_iface);
622 break;
623
625 IWebBrowser2_GoForward(&This->IWebBrowser2_iface);
626 break;
627
628 case ID_BROWSE_STOP:
629 IWebBrowser2_Stop(&This->IWebBrowser2_iface);
630 break;
631
633 IWebBrowser2_Refresh(&This->IWebBrowser2_iface);
634 break;
635
636 case ID_BROWSE_ABOUT:
638 break;
639
640#ifdef __REACTOS__
642 ie_dialog_properties(hwnd);
643 break;
644#endif
645
646 case ID_BROWSE_QUIT:
648 break;
649
650 default:
652 {
654
655 if(url)
657 }
659 }
660 return 0;
661}
662
664{
665 HWND hwndRebar = GetDlgItem(This->frame_hwnd, IDC_BROWSE_REBAR);
666 HWND hwndAddress = GetDlgItem(hwndRebar, IDC_BROWSE_ADDRESSBAR);
667 HWND hwndEdit = (HWND)SendMessageW(hwndAddress, CBEM_GETEDITCONTROL, 0, 0);
669
671
672 return 0;
673}
674
676{
678
679 switch (msg)
680 {
681 case WM_CREATE:
683 case WM_CLOSE:
684 TRACE("WM_CLOSE\n");
686 return 0;
687 case WM_SHOWWINDOW:
688 TRACE("WM_SHOWWINDOW %Ix\n", wparam);
689 if(wparam) {
690 IWebBrowser2_AddRef(&This->IWebBrowser2_iface);
691 InterlockedIncrement(&This->extern_ref);
692 }else {
694 IWebBrowser2_Release(&This->IWebBrowser2_iface);
695 }
696 break;
697 case WM_DESTROY:
698 return iewnd_OnDestroy(This);
699 case WM_SIZE:
701 case WM_COMMAND:
703 case WM_NOTIFY:
705 case WM_DOCHOSTTASK:
706 return process_dochost_tasks(&This->doc_host);
707 case WM_UPDATEADDRBAR:
708 return update_addrbar(This, lparam);
709 }
711}
712
714{
715 WNDCLASSEXW wc;
716
717 memset(&wc, 0, sizeof wc);
718 wc.cbSize = sizeof(wc);
719 wc.style = 0;
721 wc.cbClsExtra = 0;
722 wc.cbWndExtra = sizeof(InternetExplorer*);
728 wc.hbrBackground = 0;
730 wc.lpszMenuName = NULL;
731
732 RegisterClassExW(&wc);
733}
734
736{
738}
739
741{
748 NULL, NULL /* FIXME */, ieframe_instance, This);
749
750 create_doc_view_hwnd(&This->doc_host);
751}
752
754{
755 return CONTAINING_RECORD(iface, InternetExplorer, doc_host);
756}
757
759{
761 return IWebBrowser2_AddRef(&This->IWebBrowser2_iface);
762}
763
765{
767 return IWebBrowser2_Release(&This->IWebBrowser2_iface);
768}
769
771{
772 GetClientRect(This->frame_hwnd, rc);
773 adjust_ie_docobj_rect(This->frame_hwnd, rc);
774}
775
777{
780}
781
783{
785
786 switch(command) {
787 case CSC_NAVIGATEBACK:
789 break;
790 case CSC_NAVIGATEFORWARD:
792 break;
793 }
794}
795
796static void DocHostContainer_set_url(DocHost* iface, const WCHAR *url)
797{
799 const WCHAR *orig_url = error_url_frag(url);
800
801 if(orig_url)
802 url = orig_url;
803
804 This->nohome = FALSE;
805 SendMessageW(This->frame_hwnd, WM_UPDATEADDRBAR, 0, (LPARAM)url);
806}
807
815};
816
818{
820
821 ret = calloc(1, sizeof(InternetExplorer));
822 if(!ret)
823 return E_OUTOFMEMORY;
824
825 ret->ref = 1;
826
827 DocHost_Init(&ret->doc_host, &ret->IWebBrowser2_iface, &DocHostContainerVtbl);
828
830
831 HlinkFrame_Init(&ret->hlink_frame, (IUnknown*)&ret->IWebBrowser2_iface, &ret->doc_host);
832
834
836 list_add_tail(&ie_list, &ret->entry);
837 *ret_obj = ret;
838 return S_OK;
839}
840
842{
845
846 TRACE("(%p %s %p)\n", pOuter, debugstr_guid(riid), ppv);
847
848 hres = create_ie(&ret);
849 if(FAILED(hres))
850 return hres;
851
852 hres = IWebBrowser2_QueryInterface(&ret->IWebBrowser2_iface, riid, ppv);
853 IWebBrowser2_Release(&ret->IWebBrowser2_iface);
854 if(FAILED(hres))
855 return hres;
856
857 return S_OK;
858}
859
860/******************************************************************
861 * IInternetExplorerManager implementation
862 */
866};
867
869{
870 return CONTAINING_RECORD(iface, InternetExplorerManager, IInternetExplorerManager_iface);
871}
872
874{
875 TRACE("(%p)->(%s, %p)\n", iface, debugstr_guid(riid), out);
876
877 if (IsEqualGUID(riid, &IID_IInternetExplorerManager) || IsEqualGUID(riid, &IID_IUnknown))
878 {
879 IInternetExplorerManager_AddRef(iface);
880 *out = iface;
881 return S_OK;
882 }
883
884 FIXME("interface %s not implemented\n", debugstr_guid(riid));
885 *out = NULL;
886 return E_NOINTERFACE;
887}
888
890{
893
894 TRACE("(%p) increasing refcount to %lu\n", iface, ref);
895
896 return ref;
897}
898
900{
903
904 TRACE("(%p) decreasing refcount to %lu\n", iface, ref);
905
906 if (ref == 0)
907 {
908 free(This);
909 released_obj();
910 }
911
912 return ref;
913}
914
916{
917 FIXME("(%p)->(0x%lx, %s, %s, %p) stub!\n", iface, config, debugstr_w(url), debugstr_guid(riid), ppv);
918
919 return E_NOTIMPL;
920}
921
922static const IInternetExplorerManagerVtbl InternetExplorerManager_vtbl =
923{
928};
929
931{
933 HRESULT hr;
934
935 TRACE("(%p %s %p)\n", pOuter, debugstr_guid(riid), ppv);
936
937 if (!(ret = calloc(1, sizeof(*ret))))
938 return E_OUTOFMEMORY;
939
940 ret->IInternetExplorerManager_iface.lpVtbl = &InternetExplorerManager_vtbl;
941 ret->ref = 1;
942
943 hr = IInternetExplorerManager_QueryInterface(&ret->IInternetExplorerManager_iface, riid, ppv);
944 IInternetExplorerManager_Release(&ret->IInternetExplorerManager_iface);
945
947 return hr;
948}
949
950void released_obj(void)
951{
954}
955
956static BOOL create_ie_window(BOOL nohome, const WCHAR *cmdline)
957{
960
961 hres = create_ie(&ie);
962 if(FAILED(hres))
963 return FALSE;
964
965 IWebBrowser2_put_Visible(&ie->IWebBrowser2_iface, VARIANT_TRUE);
966 IWebBrowser2_put_MenuBar(&ie->IWebBrowser2_iface, VARIANT_TRUE);
967
968 if(!*cmdline) {
969 if (nohome)
970 ie->nohome = TRUE;
971 else
972 IWebBrowser2_GoHome(&ie->IWebBrowser2_iface);
973 }else {
974 VARIANT var_url;
975 int cmdlen;
976
977 cmdlen = lstrlenW(cmdline);
978 if(cmdlen > 2 && cmdline[0] == '"' && cmdline[cmdlen-1] == '"') {
979 cmdline++;
980 cmdlen -= 2;
981 }
982
983 V_VT(&var_url) = VT_BSTR;
984 V_BSTR(&var_url) = SysAllocStringLen(cmdline, cmdlen);
985
986 /* navigate to the first page */
987 IWebBrowser2_Navigate2(&ie->IWebBrowser2_iface, &var_url, NULL, NULL, NULL, NULL);
988
989 SysFreeString(V_BSTR(&var_url));
990 }
991
992 IWebBrowser2_Release(&ie->IWebBrowser2_iface);
993 return TRUE;
994}
995
996static HDDEDATA open_dde_url(WCHAR *dde_url)
997{
998 InternetExplorer *ie = NULL, *iter;
999 WCHAR *url, *url_end;
1000 VARIANT urlv;
1001 HRESULT hres;
1002
1003 TRACE("%s\n", debugstr_w(dde_url));
1004
1005 url = dde_url;
1006 if(*url == '"') {
1007 url++;
1008 url_end = wcschr(url, '"');
1009 if(!url_end) {
1010 FIXME("missing string terminator\n");
1011 return 0;
1012 }
1013 *url_end = 0;
1014 }else {
1015 url_end = wcschr(url, ',');
1016 if(url_end)
1017 *url_end = 0;
1018 else
1019 url_end = url + lstrlenW(url);
1020 }
1021
1023 if(iter->nohome) {
1024 IWebBrowser2_AddRef(&iter->IWebBrowser2_iface);
1025 ie = iter;
1026 break;
1027 }
1028 }
1029
1030 if(!ie) {
1031 hres = create_ie(&ie);
1032 if(FAILED(hres))
1033 return 0;
1034 }
1035
1036 IWebBrowser2_put_Visible(&ie->IWebBrowser2_iface, VARIANT_TRUE);
1037 IWebBrowser2_put_MenuBar(&ie->IWebBrowser2_iface, VARIANT_TRUE);
1038
1039 V_VT(&urlv) = VT_BSTR;
1040 V_BSTR(&urlv) = SysAllocStringLen(url, url_end-url);
1041 if(!V_BSTR(&urlv)) {
1042 IWebBrowser2_Release(&ie->IWebBrowser2_iface);
1043 return 0;
1044 }
1045
1046 hres = IWebBrowser2_Navigate2(&ie->IWebBrowser2_iface, &urlv, NULL, NULL, NULL, NULL);
1047
1048 SysFreeString(V_BSTR(&urlv));
1049 IWebBrowser2_Release(&ie->IWebBrowser2_iface);
1050
1051 if(FAILED(hres))
1052 return 0;
1053 return ULongToHandle(DDE_FACK);
1054}
1055
1056static HDDEDATA WINAPI dde_proc(UINT type, UINT uFmt, HCONV hConv, HSZ hsz1, HSZ hsz2, HDDEDATA data,
1057 ULONG_PTR dwData1, ULONG_PTR dwData2)
1058{
1059 switch(type) {
1060 case XTYP_CONNECT:
1061 TRACE("XTYP_CONNECT %p\n", hsz1);
1063
1064 case XTYP_EXECUTE: {
1065 WCHAR *url;
1066 DWORD size;
1067 HDDEDATA ret;
1068
1069 TRACE("XTYP_EXECUTE %p\n", data);
1070
1071 size = DdeGetData(data, NULL, 0, 0);
1072 if(!size) {
1073 WARN("size = 0\n");
1074 break;
1075 }
1076
1077 url = malloc(size);
1078 if(!url)
1079 break;
1080
1081 if(DdeGetData(data, (BYTE*)url, size, 0) != size) {
1082 ERR("error during read\n");
1083 free(url);
1084 break;
1085 }
1086
1087 ret = open_dde_url(url);
1088
1089 free(url);
1090 return ret;
1091 }
1092
1093 case XTYP_REQUEST:
1094 FIXME("XTYP_REQUEST\n");
1095 break;
1096
1097 default:
1098 TRACE("type %d\n", type);
1099 }
1100
1101 return NULL;
1102}
1103
1104static void init_dde(void)
1105{
1106 UINT res;
1107
1108 static const WCHAR iexploreW[] = {'I','E','x','p','l','o','r','e',0};
1109 static const WCHAR openurlW[] = {'W','W','W','_','O','p','e','n','U','R','L',0};
1110
1112 if(res != DMLERR_NO_ERROR) {
1113 WARN("DdeInitialize failed: %u\n", res);
1114 return;
1115 }
1116
1118 if(!ddestr_iexplore)
1119 WARN("Failed to create string handle: %u\n", DdeGetLastError(dde_inst));
1120
1122 if(!ddestr_openurl)
1123 WARN("Failed to create string handle: %u\n", DdeGetLastError(dde_inst));
1124
1126 WARN("DdeNameService failed\n");
1127}
1128
1129static void release_dde(void)
1130{
1131 if(ddestr_iexplore)
1133 if(ddestr_openurl)
1135 if(ddestr_iexplore)
1138}
1139
1140/******************************************************************
1141 * IEWinMain (ieframe.101)
1142 *
1143 * Only returns on error.
1144 */
1145DWORD WINAPI IEWinMain(const WCHAR *cmdline, int nShowWindow)
1146{
1147 BOOL embedding = FALSE, nohome = FALSE, manager = FALSE, activated = FALSE;
1148 MSG msg;
1149 HRESULT hres;
1151 DWORD reg_cookie, ret = 1;
1152 ULONG_PTR context_cookie;
1153 ACTCTXW actctx;
1154
1155 static const WCHAR embeddingW[] = {'-','e','m','b','e','d','d','i','n','g',0};
1156 static const WCHAR nohomeW[] = {'-','n','o','h','o','m','e',0};
1157 static const WCHAR startmanagerW[] = {'-','s','t','a','r','t','m','a','n','a','g','e','r',0};
1158
1159 TRACE("%s %d\n", debugstr_w(cmdline), nShowWindow);
1160
1162
1163 memset(&actctx, 0, sizeof(actctx));
1164 actctx.cbSize = sizeof(actctx);
1165 actctx.hModule = ieframe_instance;
1166 actctx.lpResourceName = MAKEINTRESOURCEW(123);
1167 actctx.dwFlags = ACTCTX_FLAG_HMODULE_VALID | ACTCTX_FLAG_RESOURCE_NAME_VALID;
1170 activated = ActivateActCtx(context, &context_cookie);
1171
1172 init_dde();
1173
1174 while (*cmdline)
1175 {
1176 int length = 0;
1177
1178 while (*cmdline == ' ' || *cmdline == '\t') cmdline++;
1179 if (!*cmdline) break;
1180
1181 while (cmdline[length] && cmdline[length] != ' ' && cmdline[length] != '\t') length++;
1182
1183 if (!wcsnicmp(cmdline, embeddingW, length))
1184 embedding = TRUE;
1185 else if (!wcsnicmp(cmdline, nohomeW, length))
1186 nohome = TRUE;
1187 else if (!wcsnicmp(cmdline, startmanagerW, length))
1188 manager = TRUE;
1189 else
1190 break;
1191
1192 cmdline += length;
1193 }
1194
1195 if (manager)
1196 hres = CoRegisterClassObject(&CLSID_InternetExplorerManager,
1197 (IUnknown*)&InternetExplorerManagerFactory, CLSCTX_SERVER,
1198 REGCLS_SINGLEUSE, &reg_cookie);
1199 else
1200 hres = CoRegisterClassObject(&CLSID_InternetExplorer,
1201 (IUnknown*)&InternetExplorerFactory, CLSCTX_SERVER,
1202 REGCLS_MULTIPLEUSE, &reg_cookie);
1203
1204 if (FAILED(hres))
1205 {
1206 ERR("failed to register CLSID_InternetExplorer%s: %08lx\n", manager ? "Manager" : "", hres);
1207 goto done;
1208 }
1209
1210 if (!embedding)
1211 {
1212 if(!create_ie_window(nohome, cmdline))
1213 goto done;
1214 }
1215
1216 /* run the message loop for this thread */
1217 while (GetMessageW(&msg, 0, 0, 0))
1218 {
1221 }
1222
1223 CoRevokeClassObject(reg_cookie);
1224 release_dde();
1225
1226 ret = 0;
1227done:
1229 if (activated)
1230 DeactivateActCtx(0, context_cookie);
1233}
@ lparam
Definition: SystemMenu.c:31
@ wparam
Definition: SystemMenu.c:30
unsigned int dir
Definition: maze.c:112
#define InterlockedIncrement
Definition: armddk.h:53
#define InterlockedDecrement
Definition: armddk.h:52
#define msg(x)
Definition: auth_time.c:54
#define WINE_DEFAULT_DEBUG_CHANNEL(t)
Definition: precomp.h:23
#define ARRAY_SIZE(A)
Definition: main.h:20
static void list_add_tail(struct list_entry *head, struct list_entry *entry)
Definition: list.h:83
#define FIXME(fmt,...)
Definition: precomp.h:53
#define WARN(fmt,...)
Definition: precomp.h:61
#define ERR(fmt,...)
Definition: precomp.h:57
#define ULongToHandle(h)
Definition: basetsd.h:75
const GUID IID_IUnknown
Definition: list.h:39
HWND hwndEdit
Definition: combotst.c:65
HWND WINAPI CreateStatusWindowW(LONG style, LPCWSTR text, HWND parent, UINT wid)
Definition: commctrl.c:806
#define CBF_FAIL_POKES
Definition: ddeml.h:107
#define DNS_UNREGISTER
Definition: ddeml.h:153
INT WINAPI DdeCmpStringHandles(HSZ, HSZ)
Definition: ddemisc.c:685
#define DNS_REGISTER
Definition: ddeml.h:152
#define CBF_SKIP_ALLNOTIFICATIONS
Definition: ddeml.h:115
#define DMLERR_NO_ERROR
Definition: ddeml.h:242
BOOL WINAPI DdeUninitialize(DWORD)
Definition: ddemisc.c:1112
#define XTYP_CONNECT
Definition: ddeml.h:186
#define DDE_FACK
Definition: ddeml.h:216
#define XTYP_REQUEST
Definition: ddeml.h:191
UINT WINAPI DdeInitializeW(LPDWORD, PFNCALLBACK, DWORD, DWORD)
Definition: ddemisc.c:1095
UINT WINAPI DdeGetLastError(DWORD)
Definition: ddemisc.c:253
HSZ WINAPI DdeCreateStringHandleW(DWORD, LPCWSTR, INT)
Definition: ddemisc.c:608
BOOL WINAPI DdeFreeStringHandle(DWORD, HSZ)
Definition: ddemisc.c:631
#define XTYP_EXECUTE
Definition: ddeml.h:185
HDDEDATA WINAPI DdeNameService(DWORD, HSZ, HSZ, UINT)
Definition: ddeserver.c:154
#define CP_WINUNICODE
Definition: ddeml.h:33
#define CBF_FAIL_ADVISES
Definition: ddeml.h:105
DWORD WINAPI DdeGetData(HDDEDATA, LPBYTE, DWORD, DWORD)
Definition: ddemisc.c:1379
#define E_OUTOFMEMORY
Definition: ddrawi.h:100
#define E_NOTIMPL
Definition: ddrawi.h:99
#define E_FAIL
Definition: ddrawi.h:102
#define free
Definition: debug_ros.c:5
#define malloc
Definition: debug_ros.c:4
HRESULT hr
Definition: delayimp.cpp:582
#define ERROR_SUCCESS
Definition: deptool.c:10
static LSTATUS(WINAPI *pRegDeleteTreeW)(HKEY
#define NULL
Definition: types.h:112
#define TRUE
Definition: types.h:120
#define FALSE
Definition: types.h:117
HRESULT WINAPI DECLSPEC_HOTPATCH CoRevokeClassObject(DWORD cookie)
Definition: combase.c:3107
void WINAPI DECLSPEC_HOTPATCH CoUninitialize(void)
Definition: combase.c:2842
HRESULT WINAPI CoRegisterClassObject(REFCLSID rclsid, IUnknown *object, DWORD clscontext, DWORD flags, DWORD *cookie)
Definition: combase.c:2970
HRESULT WINAPI DECLSPEC_HOTPATCH CoCreateInstance(REFCLSID rclsid, IUnknown *outer, DWORD cls_context, REFIID riid, void **obj)
Definition: combase.c:1685
BOOL WINAPI ImageList_Destroy(HIMAGELIST himl)
Definition: imagelist.c:941
HIMAGELIST WINAPI ImageList_LoadImageW(HINSTANCE hi, LPCWSTR lpbmp, INT cx, INT cGrow, COLORREF clrMask, UINT uType, UINT uFlags)
Definition: imagelist.c:2226
#define wcschr
Definition: compat.h:17
#define wcsnicmp
Definition: compat.h:14
#define INVALID_HANDLE_VALUE
Definition: compat.h:731
HANDLE HWND
Definition: compat.h:19
#define MAX_PATH
Definition: compat.h:34
#define CALLBACK
Definition: compat.h:35
#define lstrcpyW
Definition: compat.h:749
@ VT_BSTR
Definition: compat.h:2303
#define lstrlenW
Definition: compat.h:750
DWORD release_extern_ref(InternetExplorer *This, BOOL last_closes)
Definition: ie.c:756
void InternetExplorer_WebBrowser_Init(InternetExplorer *This)
Definition: ie.c:872
#define ID_BROWSE_OPEN
Definition: resource.h:35
#define IDD_BROWSE_OPEN
Definition: resource.h:27
#define IDC_BROWSE_REBAR
Definition: resource.h:29
#define IDC_BROWSE_OPEN_URL
Definition: resource.h:28
#define IDS_TB_BACK
Definition: resource.h:63
#define IDS_TB_HOME
Definition: resource.h:67
#define IDC_BROWSE_TOOLBAR
Definition: resource.h:32
#define ID_BROWSE_ABOUT
Definition: resource.h:43
#define ID_BROWSE_GOTOFAV_MAX
Definition: resource.h:56
#define ID_BROWSE_FORWARD
Definition: resource.h:48
#define IDC_BROWSE_STATUSBAR
Definition: resource.h:31
#define ID_BROWSE_QUIT
Definition: resource.h:42
#define ID_BROWSE_REFRESH
Definition: resource.h:50
#define IDC_BROWSE_ADDRESSBAR
Definition: resource.h:30
#define ID_BROWSE_PRINT
Definition: resource.h:39
#define IDS_ADDRESS
Definition: resource.h:70
#define IDS_TB_STOP
Definition: resource.h:65
#define ID_BROWSE_BACK
Definition: resource.h:47
#define ID_BROWSE_STOP
Definition: resource.h:49
#define IDB_IETOOLBAR
Definition: resource.h:72
#define IDS_TB_REFRESH
Definition: resource.h:66
#define ID_BROWSE_HOME
Definition: resource.h:46
#define IDS_TB_PRINT
Definition: resource.h:68
#define IDS_TB_FORWARD
Definition: resource.h:64
#define ID_BROWSE_GOTOFAV_FIRST
Definition: resource.h:55
#define ID_BROWSE_PROPERTIES
Definition: resource.h:41
#define IDR_BROWSE_MAIN_MENU
Definition: resource.h:26
VOID WINAPI ReleaseActCtx(IN HANDLE hActCtx)
Definition: actctx.c:208
BOOL WINAPI DeactivateActCtx(IN DWORD dwFlags, IN ULONG_PTR ulCookie)
Definition: actctx.c:268
BOOL WINAPI ActivateActCtx(IN HANDLE hActCtx, OUT PULONG_PTR ulCookie)
Definition: actctx.c:237
HANDLE WINAPI FindFirstFileW(IN LPCWSTR lpFileName, OUT LPWIN32_FIND_DATAW lpFindFileData)
Definition: find.c:320
BOOL WINAPI FindClose(HANDLE hFindFile)
Definition: find.c:502
BOOL WINAPI FindNextFileW(IN HANDLE hFindFile, OUT LPWIN32_FIND_DATAW lpFindFileData)
Definition: find.c:382
HMODULE WINAPI GetModuleHandleW(LPCWSTR lpModuleName)
Definition: loader.c:838
VOID WINAPI ExitProcess(IN UINT uExitCode)
Definition: proc.c:1382
HANDLE WINAPI CreateActCtxW(PCACTCTXW pActCtx)
Definition: actctx.c:102
int WINAPI lstrcmpW(LPCWSTR str1, LPCWSTR str2)
Definition: locale.c:4152
int WINAPI lstrcmpiW(LPCWSTR str1, LPCWSTR str2)
Definition: locale.c:4171
LPWSTR WINAPI PathFindExtensionW(const WCHAR *path)
Definition: path.c:1250
LONG WINAPI SHRegCloseUSKey(HUSKEY hUSKey)
Definition: registry.c:3626
LONG WINAPI SHRegEnumUSValueW(HUSKEY hUSKey, DWORD index, WCHAR *value_name, DWORD *value_name_len, DWORD *type, void *data, DWORD *data_len, SHREGENUM_FLAGS flags)
Definition: registry.c:3688
LONG WINAPI SHRegQueryUSValueW(HUSKEY hUSKey, const WCHAR *value, DWORD *type, void *data, DWORD *data_len, BOOL ignore_hkcu, void *default_data, DWORD default_data_len)
Definition: registry.c:4019
LONG WINAPI SHRegOpenUSKeyW(const WCHAR *path, REGSAM access_mask, HUSKEY relative_key, HUSKEY *uskey, BOOL ignore_hkcu)
Definition: registry.c:3747
GUID guid
Definition: version.c:147
const WCHAR * text
Definition: package.c:1826
static REFPROPVARIANT PROPVAR_CHANGE_FLAGS VARTYPE vt
Definition: suminfo.c:90
_ACRTIMP size_t __cdecl wcslen(const wchar_t *)
Definition: wcs.c:2988
HRESULT WINAPI CoInitialize(LPVOID lpReserved)
Definition: compobj.c:531
HRESULT WINAPI SHGetFolderPathW(HWND hwndOwner, int nFolder, HANDLE hToken, DWORD dwFlags, LPWSTR pszPath)
Definition: shellpath.c:3816
void DocHost_Init(DocHost *This, IWebBrowser2 *wb, const IDocHostContainerVtbl *container)
Definition: dochost.c:1137
LRESULT process_dochost_tasks(DocHost *This)
Definition: dochost.c:55
void create_doc_view_hwnd(DocHost *This)
Definition: dochost.c:484
return ret
Definition: mutex.c:147
#define L(x)
Definition: resources.c:13
#define ULONG_PTR
Definition: config.h:101
unsigned int BOOL
Definition: ntddk_ex.h:94
unsigned long DWORD
Definition: ntddk_ex.h:95
GLuint GLuint GLsizei count
Definition: gl.h:1545
GLint GLint GLsizei GLsizei height
Definition: gl.h:1546
GLuint GLuint GLsizei GLenum type
Definition: gl.h:1545
GLint GLenum GLsizei GLsizei GLsizei GLint GLsizei const GLvoid * data
Definition: gl.h:1950
GLint GLint GLsizei width
Definition: gl.h:1546
GLuint res
Definition: glext.h:9613
GLsizeiptr size
Definition: glext.h:5919
GLenum GLuint GLenum GLsizei const GLchar * buf
Definition: glext.h:7751
GLuint GLsizei GLsizei * length
Definition: glext.h:6040
GLenum const GLvoid * addr
Definition: glext.h:9621
GLboolean enable
Definition: glext.h:11120
GLenum GLsizei len
Definition: glext.h:6722
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
Definition: glfuncs.h:248
unsigned int UINT
Definition: sysinfo.c:13
void HlinkFrame_Init(HlinkFrame *, IUnknown *, DocHost *)
Definition: navigate.c:1733
const WCHAR * error_url_frag(const WCHAR *)
Definition: shellbrowser.c:32
IClassFactory InternetExplorerFactory
Definition: ieframe_main.c:262
IClassFactory InternetExplorerManagerFactory
Definition: ieframe_main.c:272
HINSTANCE ieframe_instance
Definition: ieframe_main.c:32
#define WM_DOCHOSTTASK
Definition: ieframe.h:300
HRESULT WINAPI InternetExplorer_Create(IClassFactory *iface, IUnknown *pOuter, REFIID riid, void **ppv)
Definition: iexplore.c:841
static INT_PTR CALLBACK ie_dialog_open_proc(HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam)
Definition: iexplore.c:347
DWORD WINAPI IEWinMain(const WCHAR *cmdline, int nShowWindow)
Definition: iexplore.c:1145
static const IDocHostContainerVtbl DocHostContainerVtbl
Definition: iexplore.c:808
static void init_dde(void)
Definition: iexplore.c:1104
static void release_dde(void)
Definition: iexplore.c:1129
void register_iewindow_class(void)
Definition: iexplore.c:713
static HSZ ddestr_openurl
Definition: iexplore.c:60
static ULONG WINAPI InternetExplorerManager_AddRef(IInternetExplorerManager *iface)
Definition: iexplore.c:889
static InternetExplorer * impl_from_DocHost(DocHost *iface)
Definition: iexplore.c:753
static const IInternetExplorerManagerVtbl InternetExplorerManager_vtbl
Definition: iexplore.c:922
static ULONG IEDocHost_addref(DocHost *iface)
Definition: iexplore.c:758
static HRESULT WINAPI InternetExplorerManager_CreateObject(IInternetExplorerManager *iface, DWORD config, LPCWSTR url, REFIID riid, void **ppv)
Definition: iexplore.c:915
static void adjust_ie_docobj_rect(HWND frame, RECT *rc)
Definition: iexplore.c:71
static LRESULT WINAPI ie_window_proc(HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam)
Definition: iexplore.c:675
static void add_favs_to_menu(HMENU favmenu, HMENU menu, LPCWSTR dir)
Definition: iexplore.c:171
HRESULT update_ie_statustext(InternetExplorer *This, LPCWSTR text)
Definition: iexplore.c:63
static void enable_toolbar_button(InternetExplorer *ie, int command, BOOL enable)
Definition: iexplore.c:440
static void add_fav_to_menu(HMENU favmenu, HMENU menu, LPWSTR title, LPCWSTR url)
Definition: iexplore.c:142
static HDDEDATA open_dde_url(WCHAR *dde_url)
Definition: iexplore.c:996
static BOOL create_ie_window(BOOL nohome, const WCHAR *cmdline)
Definition: iexplore.c:956
static HMENU get_fav_menu(HMENU menu)
Definition: iexplore.c:95
static void add_tbs_to_menu(HMENU menu)
Definition: iexplore.c:251
static InternetExplorerManager * impl_from_IInternetExplorerManager(IInternetExplorerManager *iface)
Definition: iexplore.c:868
static HSZ ddestr_iexplore
Definition: iexplore.c:60
static HRESULT WINAPI InternetExplorerManager_QueryInterface(IInternetExplorerManager *iface, REFIID riid, void **out)
Definition: iexplore.c:873
static void DocHostContainer_get_docobj_rect(DocHost *This, RECT *rc)
Definition: iexplore.c:770
void released_obj(void)
Definition: iexplore.c:950
static LRESULT iewnd_OnNotify(InternetExplorer *This, WPARAM wparam, LPARAM lparam)
Definition: iexplore.c:543
static void create_rebar(InternetExplorer *ie)
Definition: iexplore.c:445
static ULONG WINAPI InternetExplorerManager_Release(IInternetExplorerManager *iface)
Definition: iexplore.c:899
static void add_tb_separator(InternetExplorer *ie)
Definition: iexplore.c:412
#define WM_UPDATEADDRBAR
Definition: iexplore.c:50
static LONG obj_cnt
Definition: iexplore.c:58
#define IDI_APPICON
Definition: iexplore.c:48
static LRESULT iewnd_OnCreate(HWND hwnd, LPCREATESTRUCTW lpcs)
Definition: iexplore.c:506
static LRESULT iewnd_OnSize(InternetExplorer *This, INT width, INT height)
Definition: iexplore.c:524
static const WCHAR wszWineInternetExplorer[]
Definition: iexplore.c:55
static HRESULT DocHostContainer_set_status_text(DocHost *iface, const WCHAR *text)
Definition: iexplore.c:776
static LPWSTR get_fav_url_from_id(HMENU menu, UINT id)
Definition: iexplore.c:100
static void add_tb_button(InternetExplorer *ie, int bmp, int cmd, int strId)
Definition: iexplore.c:423
static HMENU get_tb_menu(HMENU menu)
Definition: iexplore.c:88
void unregister_iewindow_class(void)
Definition: iexplore.c:735
static int get_menu_item_count(HMENU menu)
Definition: iexplore.c:122
static void ie_navigate(InternetExplorer *This, LPCWSTR url)
Definition: iexplore.c:335
static void create_frame_hwnd(InternetExplorer *This)
Definition: iexplore.c:740
static void free_fav_menu_data(HMENU menu)
Definition: iexplore.c:113
HRESULT WINAPI InternetExplorerManager_Create(IClassFactory *iface, IUnknown *pOuter, REFIID riid, void **ppv)
Definition: iexplore.c:930
static void DocHostContainer_on_command_state_change(DocHost *iface, LONG command, BOOL enable)
Definition: iexplore.c:782
static struct list ie_list
Definition: iexplore.c:61
static void DocHostContainer_set_url(DocHost *iface, const WCHAR *url)
Definition: iexplore.c:796
static LRESULT iewnd_OnCommand(InternetExplorer *This, HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam)
Definition: iexplore.c:594
static ULONG IEDocHost_release(DocHost *iface)
Definition: iexplore.c:764
static DWORD dde_inst
Definition: iexplore.c:59
static LRESULT iewnd_OnDestroy(InternetExplorer *This)
Definition: iexplore.c:581
static void ie_dialog_about(HWND hwnd)
Definition: iexplore.c:396
static LRESULT update_addrbar(InternetExplorer *This, LPARAM lparam)
Definition: iexplore.c:663
static HMENU create_ie_menu(void)
Definition: iexplore.c:318
static HDDEDATA WINAPI dde_proc(UINT type, UINT uFmt, HCONV hConv, HSZ hsz1, HSZ hsz2, HDDEDATA data, ULONG_PTR dwData1, ULONG_PTR dwData2)
Definition: iexplore.c:1056
static HRESULT create_ie(InternetExplorer **ret_obj)
Definition: iexplore.c:817
static const WCHAR szIEWinFrame[]
Definition: iexplore.c:52
REFIID riid
Definition: atlbase.h:39
REFIID LPVOID * ppv
Definition: atlbase.h:39
#define S_OK
Definition: intsafe.h:52
#define SUCCEEDED(hr)
Definition: intsafe.h:50
#define FAILED(hr)
Definition: intsafe.h:51
const char * filename
Definition: ioapi.h:137
char hdr[14]
Definition: iptest.cpp:33
uint32_t entry
Definition: isohybrid.c:63
#define debugstr_guid
Definition: kernel32.h:35
#define actctx
Definition: kernel32.h:8
#define debugstr_w
Definition: kernel32.h:32
#define ZeroMemory
Definition: minwinbase.h:31
LONG_PTR LPARAM
Definition: minwindef.h:175
LONG_PTR LRESULT
Definition: minwindef.h:176
UINT_PTR WPARAM
Definition: minwindef.h:174
#define SB_SIMPLEID
Definition: precomp.h:15
BITMAP bmp
Definition: alphablend.c:62
static HICON
Definition: imagelist.c:80
static const WCHAR url[]
Definition: encode.c:1384
HRESULT hres
Definition: protocol.c:432
static const CLSID *static CLSID *static const GUID VARIANT VARIANT *static IServiceProvider DWORD *static HMENU
Definition: ordinal.c:60
#define menu
Definition: input.c:3282
static UINT activated
Definition: msctf.cpp:42
static short search(int val, const short *table, int size)
Definition: msg711.c:255
#define IDM_PRINT
Definition: mshtmcid.h:49
__int3264 LONG_PTR
Definition: mstsclib_h.h:276
#define KEY_READ
Definition: nt_native.h:1026
#define FILE_ATTRIBUTE_DIRECTORY
Definition: nt_native.h:705
@ REGCLS_MULTIPLEUSE
Definition: objbase.h:398
@ REGCLS_SINGLEUSE
Definition: objbase.h:397
BSTR WINAPI SysAllocString(LPCOLESTR str)
Definition: oleaut.c:240
void WINAPI DECLSPEC_HOTPATCH SysFreeString(BSTR str)
Definition: oleaut.c:273
BSTR WINAPI SysAllocStringLen(const OLECHAR *str, unsigned int len)
Definition: oleaut.c:341
#define V_VT(A)
Definition: oleauto.h:211
#define V_BSTR(A)
Definition: oleauto.h:226
const GUID IID_IPersistFile
#define PathAppendW
Definition: pathcch.h:310
#define LOWORD(l)
Definition: pedump.c:82
#define WS_CHILD
Definition: pedump.c:617
#define WS_CAPTION
Definition: pedump.c:624
#define WS_MAXIMIZEBOX
Definition: pedump.c:632
#define WS_SYSMENU
Definition: pedump.c:629
short WCHAR
Definition: pedump.c:58
#define WS_BORDER
Definition: pedump.c:625
#define WS_VISIBLE
Definition: pedump.c:620
long LONG
Definition: pedump.c:60
#define WS_CLIPSIBLINGS
Definition: pedump.c:618
#define WS_CLIPCHILDREN
Definition: pedump.c:619
#define WS_MINIMIZEBOX
Definition: pedump.c:631
#define WS_THICKFRAME
Definition: pedump.c:630
static char title[]
Definition: ps.c:92
#define SB_SIMPLE
Definition: commctrl.h:1963
#define RB_GETBARHEIGHT
Definition: commctrl.h:1608
#define RBBS_BREAK
Definition: commctrl.h:1489
#define BTNS_SHOWTEXT
Definition: commctrl.h:1006
#define CBENF_RETURN
Definition: commctrl.h:3893
#define REBARCLASSNAMEW
Definition: commctrl.h:1463
#define RBBIM_CHILDSIZE
Definition: commctrl.h:1507
#define SBT_NOBORDERS
Definition: commctrl.h:1976
#define RB_INSERTBANDW
Definition: commctrl.h:1583
#define CBEN_ENDEDITW
Definition: commctrl.h:3881
#define BTNS_SEP
Definition: commctrl.h:999
#define CLR_NONE
Definition: commctrl.h:319
#define RBN_HEIGHTCHANGE
Definition: commctrl.h:1628
#define TBSTYLE_EX_MIXEDBUTTONS
Definition: commctrl.h:1012
struct _IMAGELIST * HIMAGELIST
Definition: commctrl.h:324
#define RBBIM_CHILD
Definition: commctrl.h:1506
#define TB_BUTTONSTRUCTSIZE
Definition: commctrl.h:1134
#define WC_COMBOBOXEXW
Definition: commctrl.h:3786
#define TB_SETIMAGELIST
Definition: commctrl.h:1150
#define TB_ENABLEBUTTON
Definition: commctrl.h:1042
#define TB_GETMAXSIZE
Definition: commctrl.h:1189
#define RBBS_CHILDEDGE
Definition: commctrl.h:1491
#define TB_SETBUTTONSIZE
Definition: commctrl.h:1135
#define CCS_NODIVIDER
Definition: commctrl.h:2253
#define TOOLBARCLASSNAMEW
Definition: commctrl.h:943
#define CCS_TOP
Definition: commctrl.h:2247
#define TBSTATE_ENABLED
Definition: commctrl.h:974
#define TBSTYLE_FLAT
Definition: commctrl.h:992
#define RBS_VARHEIGHT
Definition: commctrl.h:1471
#define CCS_NORESIZE
Definition: commctrl.h:2250
#define SB_SETTEXTW
Definition: commctrl.h:1947
#define TB_ADDBUTTONSW
Definition: commctrl.h:1266
#define RBBIM_STYLE
Definition: commctrl.h:1502
#define RB_SETBARINFO
Definition: commctrl.h:1578
#define RBBIM_TEXT
Definition: commctrl.h:1504
#define TB_GETIMAGELIST
Definition: commctrl.h:1151
#define CBEM_GETEDITCONTROL
Definition: commctrl.h:3838
#define IsEqualGUID(rguid1, rguid2)
Definition: guiddef.h:147
#define REFIID
Definition: guiddef.h:118
@ SHREGENUM_HKLM
Definition: shlwapi.h:735
HMENU WINAPI CreatePopupMenu(void)
Definition: menu.c:838
#define SW_HIDE
Definition: winuser.h:779
#define WM_CLOSE
Definition: winuser.h:1649
#define SWP_NOACTIVATE
Definition: winuser.h:1253
#define IMAGE_BITMAP
Definition: winuser.h:211
#define MIIM_STRING
Definition: winuser.h:738
#define GetWindowLongPtrW
Definition: winuser.h:4983
BOOL WINAPI TranslateMessage(_In_ const MSG *)
#define MIIM_ID
Definition: winuser.h:733
#define MAKELPARAM(l, h)
Definition: winuser.h:4116
BOOL WINAPI ShowWindow(_In_ HWND, _In_ int)
LRESULT WINAPI DefWindowProcW(_In_ HWND, _In_ UINT, _In_ WPARAM, _In_ LPARAM)
int WINAPI GetMenuItemCount(_In_opt_ HMENU)
#define IDCANCEL
Definition: winuser.h:842
BOOL WINAPI GetMessageW(_Out_ LPMSG, _In_opt_ HWND, _In_ UINT, _In_ UINT)
#define IMAGE_ICON
Definition: winuser.h:212
#define WM_CREATE
Definition: winuser.h:1636
BOOL WINAPI SetWindowPos(_In_ HWND, _In_opt_ HWND, _In_ int, _In_ int, _In_ int, _In_ int, _In_ UINT)
__analysis_noreturn void WINAPI PostQuitMessage(_In_ int)
#define WM_SIZE
Definition: winuser.h:1639
#define LR_CREATEDIBSECTION
Definition: winuser.h:1109
#define WM_COMMAND
Definition: winuser.h:1768
#define MIIM_FTYPE
Definition: winuser.h:740
HANDLE WINAPI LoadImageW(_In_opt_ HINSTANCE hInst, _In_ LPCWSTR name, _In_ UINT type, _In_ int cx, _In_ int cy, _In_ UINT fuLoad)
Definition: cursoricon.c:2572
#define IDC_ARROW
Definition: winuser.h:695
#define WS_EX_TOOLWINDOW
Definition: winuser.h:404
#define SM_CYSMICON
Definition: winuser.h:1024
#define WM_INITDIALOG
Definition: winuser.h:1767
HCURSOR WINAPI LoadCursorW(_In_opt_ HINSTANCE, _In_ LPCWSTR)
Definition: cursoricon.c:2474
HWND WINAPI GetDlgItem(_In_opt_ HWND, _In_ int)
#define IDOK
Definition: winuser.h:841
#define WM_SHOWWINDOW
Definition: winuser.h:1656
#define WM_SETTEXT
Definition: winuser.h:1645
#define SM_CXSMICON
Definition: winuser.h:1023
BOOL WINAPI GetClientRect(_In_ HWND, _Out_ LPRECT)
HMENU WINAPI GetSubMenu(_In_ HMENU, _In_ int)
#define MIIM_SUBMENU
Definition: winuser.h:734
HWND WINAPI CreateWindowExW(_In_ DWORD dwExStyle, _In_opt_ LPCWSTR lpClassName, _In_opt_ LPCWSTR lpWindowName, _In_ DWORD dwStyle, _In_ int X, _In_ int Y, _In_ int nWidth, _In_ int nHeight, _In_opt_ HWND hWndParent, _In_opt_ HMENU hMenu, _In_opt_ HINSTANCE hInstance, _In_opt_ LPVOID lpParam)
ATOM WINAPI RegisterClassExW(_In_ CONST WNDCLASSEXW *)
#define WS_EX_WINDOWEDGE
Definition: winuser.h:407
BOOL WINAPI EnableWindow(_In_ HWND, _In_ BOOL)
#define CBS_DROPDOWN
Definition: winuser.h:283
int WINAPI GetWindowTextLengthW(_In_ HWND)
#define LR_SHARED
Definition: winuser.h:1111
#define CW_USEDEFAULT
Definition: winuser.h:225
BOOL WINAPI GetMenuItemInfoW(_In_ HMENU, _In_ UINT, _In_ BOOL, _Inout_ LPMENUITEMINFOW)
LRESULT WINAPI DispatchMessageW(_In_ const MSG *)
#define MFT_STRING
Definition: winuser.h:757
#define WM_DESTROY
Definition: winuser.h:1637
BOOL WINAPI UnregisterClassW(_In_ LPCWSTR, HINSTANCE)
#define MAKEINTRESOURCEW(i)
Definition: winuser.h:582
HMENU WINAPI LoadMenuW(_In_opt_ HINSTANCE, _In_ LPCWSTR)
#define SWP_NOZORDER
Definition: winuser.h:1258
#define SetWindowLongPtrW
Definition: winuser.h:5512
BOOL WINAPI InflateRect(_Inout_ LPRECT, _In_ int, _In_ int)
BOOL WINAPI IsWindowVisible(_In_ HWND)
HICON WINAPI LoadIconW(_In_opt_ HINSTANCE hInstance, _In_ LPCWSTR lpIconName)
Definition: cursoricon.c:2444
int WINAPI GetSystemMetrics(_In_ int)
#define MIIM_DATA
Definition: winuser.h:737
LRESULT WINAPI SendMessageW(_In_ HWND, _In_ UINT, _In_ WPARAM, _In_ LPARAM)
BOOL WINAPI InsertMenuItemW(_In_ HMENU, _In_ UINT, _In_ BOOL, _In_ LPCMENUITEMINFOW)
INT_PTR WINAPI DialogBoxParamW(_In_opt_ HINSTANCE, _In_ LPCWSTR, _In_opt_ HWND, _In_opt_ DLGPROC, _In_ LPARAM)
BOOL WINAPI EndDialog(_In_ HWND, _In_ INT_PTR)
BOOL WINAPI DestroyIcon(_In_ HICON)
Definition: cursoricon.c:2422
#define WM_NOTIFY
Definition: richedit.h:61
#define calloc
Definition: rosglue.h:14
#define LIST_FOR_EACH_ENTRY(elem, list, type, field)
Definition: list.h:236
#define LoadStringW
Definition: utils.h:64
#define memset(x, y, z)
Definition: compat.h:39
BOOL WINAPI ShellAboutW(HWND hWnd, LPCWSTR szApp, LPCWSTR szOtherStuff, HICON hIcon)
HINSTANCE WINAPI ShellExecuteW(HWND hwnd, LPCWSTR lpVerb, LPCWSTR lpFile, LPCWSTR lpParameters, LPCWSTR lpDirectory, INT nShowCmd)
Definition: shlexec.cpp:2793
@ SHGFP_TYPE_CURRENT
Definition: shlobj.h:2196
#define CSIDL_FAVORITES
Definition: shlobj.h:2226
#define CSIDL_COMMON_FAVORITES
Definition: shlobj.h:2250
#define TRACE(s)
Definition: solgame.cpp:4
HWND hwndStatus
Definition: solitaire.cpp:14
TCHAR * cmdline
Definition: stretchblt.cpp:32
IInternetExplorerManager IInternetExplorerManager_iface
Definition: iexplore.c:864
HWND toolbar_hwnd
Definition: ieframe.h:246
IWebBrowser2 IWebBrowser2_iface
Definition: ieframe.h:236
Definition: dcommon.idl:28
long bottom
Definition: dcommon.idl:29
long right
Definition: dcommon.idl:29
long left
Definition: dcommon.idl:29
long top
Definition: dcommon.idl:29
LONG cx
Definition: kdterminal.h:27
LONG cy
Definition: kdterminal.h:28
BYTE fsState
Definition: commctrl.h:951
INT_PTR iString
Definition: commctrl.h:959
int idCommand
Definition: commctrl.h:950
DWORD_PTR dwData
Definition: commctrl.h:958
int iBitmap
Definition: commctrl.h:949
BYTE fsStyle
Definition: commctrl.h:952
_Field_z_ WCHAR cFileName[MAX_PATH]
Definition: minwinbase.h:291
DWORD dwFileAttributes
Definition: minwinbase.h:283
LPCWSTR lpszClassName
Definition: winuser.h:3334
LPCWSTR lpszMenuName
Definition: winuser.h:3333
HBRUSH hbrBackground
Definition: winuser.h:3332
WNDPROC lpfnWndProc
Definition: winuser.h:3326
UINT cbSize
Definition: winuser.h:3324
int cbWndExtra
Definition: winuser.h:3328
HCURSOR hCursor
Definition: winuser.h:3331
HICON hIconSm
Definition: winuser.h:3335
HINSTANCE hInstance
Definition: winuser.h:3329
UINT style
Definition: winuser.h:3325
int cbClsExtra
Definition: winuser.h:3327
HICON hIcon
Definition: winuser.h:3330
Definition: ftp_var.h:139
Definition: http.c:7783
Definition: send.c:48
LPVOID lpCreateParams
Definition: winuser.h:3063
HIMAGELIST himl
Definition: commctrl.h:1483
Definition: tools.h:99
#define LIST_INIT(head)
Definition: queue.h:197
TW_UINT32 TW_UINT16 TW_UINT16 MSG
Definition: twain.h:1829
int32_t INT_PTR
Definition: typedefs.h:64
const uint16_t * LPCWSTR
Definition: typedefs.h:57
#define MAKEWORD(a, b)
Definition: typedefs.h:248
uint16_t * LPWSTR
Definition: typedefs.h:56
int32_t INT
Definition: typedefs.h:58
uint32_t ULONG_PTR
Definition: typedefs.h:65
#define CONTAINING_RECORD(address, type, field)
Definition: typedefs.h:260
uint32_t ULONG
Definition: typedefs.h:59
#define HIWORD(l)
Definition: typedefs.h:247
wchar_t tm const _CrtWcstime_Writes_and_advances_ptr_ count wchar_t ** out
Definition: wcsftime.cpp:383
int WINAPI GetWindowTextW(HWND hWnd, LPWSTR lpString, int nMaxCount)
Definition: window.c:1382
_In_ LONG _In_ HWND hwnd
Definition: winddi.h:4023
#define WINAPI
Definition: msvc.h:6
#define E_NOINTERFACE
Definition: winerror.h:3479
unsigned char BYTE
Definition: xxhash.c:193