[6/6] explorer: Add run dialog to start menu.
Vincent Povirk
madewokherd at gmail.com
Tue Dec 10 15:12:07 CST 2013
-------------- next part --------------
From 319b10e6a899bfb7573181b2817505ec876238b7 Mon Sep 17 00:00:00 2001
From: Vincent Povirk <vincent at codeweavers.com>
Date: Tue, 10 Dec 2013 14:57:28 -0600
Subject: [PATCH 6/6] explorer: Add run dialog to start menu.
---
programs/explorer/explorer.rc | 1 +
programs/explorer/resource.h | 1 +
programs/explorer/startmenu.c | 42 ++++++++++++++++++++++++++++++++++++++++--
3 files changed, 42 insertions(+), 2 deletions(-)
diff --git a/programs/explorer/explorer.rc b/programs/explorer/explorer.rc
index 86ec4e3..349d2a7 100644
--- a/programs/explorer/explorer.rc
+++ b/programs/explorer/explorer.rc
@@ -30,6 +30,7 @@ STRINGTABLE
IDS_EXPLORER_TITLE "Wine Explorer"
IDS_PATHBOX_LABEL "Location:"
IDS_START_LABEL "Start"
+ IDS_RUN "Run..."
}
#define WINE_FILEDESCRIPTION_STR "Wine Explorer"
diff --git a/programs/explorer/resource.h b/programs/explorer/resource.h
index a7f3f3a..747dd03 100644
--- a/programs/explorer/resource.h
+++ b/programs/explorer/resource.h
@@ -24,5 +24,6 @@
#define IDS_EXPLORER_TITLE 1
#define IDS_PATHBOX_LABEL 2
#define IDS_START_LABEL 3
+#define IDS_RUN 4
#endif
diff --git a/programs/explorer/startmenu.c b/programs/explorer/startmenu.c
index 5730b39..9275b17 100644
--- a/programs/explorer/startmenu.c
+++ b/programs/explorer/startmenu.c
@@ -27,6 +27,7 @@
#include "wine/debug.h"
#include "wine/list.h"
#include "explorer_private.h"
+#include "resource.h"
WINE_DEFAULT_DEBUG_CHANNEL(explorer);
@@ -59,6 +60,8 @@ DWORD menu_thread_id;
#define WM_POPUP_MENU WM_USER
+#define MENU_ID_RUN 1
+
static ULONG copy_pidls(struct menu_item* item, LPITEMIDLIST dest)
{
ULONG item_size;
@@ -323,6 +326,27 @@ static void fill_menu(struct menu_item* item)
}
}
+static DWORD CALLBACK do_run_dialog(void* user_data)
+{
+ void WINAPI (*pRunFileDlg)(HWND hWndOwner, HICON hIcon, LPCSTR lpszDir,
+ LPCSTR lpszTitle, LPCSTR lpszDesc, DWORD dwFlags);
+ HMODULE hShell32;
+
+ hShell32 = LoadLibraryA("shell32");
+ pRunFileDlg = (void*)GetProcAddress(hShell32, (LPCSTR)61);
+
+ pRunFileDlg(NULL, NULL, NULL, NULL, NULL, 0);
+
+ FreeLibrary(hShell32);
+
+ return 0;
+}
+
+static void run_dialog(void)
+{
+ CreateThread(NULL, 0, do_run_dialog, NULL, 0, NULL);
+}
+
LRESULT CALLBACK menu_wndproc(HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam)
{
switch (msg)
@@ -351,11 +375,14 @@ LRESULT CALLBACK menu_wndproc(HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam)
MENUITEMINFOW mii;
mii.cbSize = sizeof(mii);
- mii.fMask = MIIM_DATA;
+ mii.fMask = MIIM_DATA|MIIM_ID;
GetMenuItemInfoW(hmenu, wparam, TRUE, &mii);
item = (struct menu_item*)mii.dwItemData;
- exec_item(item);
+ if (item)
+ exec_item(item);
+ else if (mii.wID == MENU_ID_RUN)
+ run_dialog();
destroy_menus();
@@ -370,9 +397,11 @@ void popup_startmenu(HWND hwnd)
{
LPITEMIDLIST pidl;
MENUINFO mi;
+ MENUITEMINFOW mii;
RECT rc={0,0,0,0};
TPMPARAMS tpm;
WNDCLASSEXW class;
+ WCHAR run_label[50];
static const WCHAR classname[] = {'W','i','n','e','M','e','n','u','P','a','r','e','n','t',0};
if (!menu_parent_class)
@@ -431,6 +460,15 @@ void popup_startmenu(HWND hwnd)
if (SUCCEEDED(SHGetSpecialFolderLocation(NULL, CSIDL_CONTROLS, &pidl)))
add_shell_item(&root_menu, pidl);
+ LoadStringW(NULL, IDS_RUN, run_label, sizeof(run_label)/sizeof(run_label[0]));
+
+ mii.cbSize = sizeof(mii);
+ mii.fMask = MIIM_STRING|MIIM_ID;
+ mii.dwTypeData = run_label;
+ mii.wID = MENU_ID_RUN;
+
+ InsertMenuItemW(root_menu.menuhandle, -1, TRUE, &mii);
+
mi.cbSize = sizeof(mi);
mi.fMask = MIM_STYLE;
mi.dwStyle = MNS_NOTIFYBYPOS;
--
1.8.1.2
More information about the wine-patches
mailing list