Fix gtk4 file explorer for windows

This commit is contained in:
daleclack 2023-09-14 21:10:31 +08:00
parent 0f64054ad0
commit 2934b08742
5 changed files with 31 additions and 5 deletions

View File

@ -1,3 +1,4 @@
{
"C_Cpp.default.configurationProvider": "ms-vscode.cmake-tools"
"C_Cpp.default.configurationProvider": "ms-vscode.cmake-tools",
"cmake.configureOnOpen": true
}

View File

@ -1,5 +1,5 @@
set(CMAKE_CXX_STANDARD 17)
cmake_minimum_required(VERSION 3.0.0)
cmake_minimum_required(VERSION 3.5.0)
project(gtk149_file_exp VERSION 1.0.0)
list(APPEND CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR}/../../GCR_CMake/macros)
@ -59,7 +59,7 @@ if(WIN32)
set_property(SOURCE ../icon.rc APPEND PROPERTY
OBJECT_DEPENDS ${PROJECT_SOURCE_DIR}/../icon.ico
)
add_executable(${PROJECT_NAME} WIN32 ${app_WINRC} ${SOURCE_FILE} ${RESOURCE_FILE})
add_executable(${PROJECT_NAME} ${app_WINRC} ${SOURCE_FILE} ${RESOURCE_FILE})
add_custom_command( TARGET ${PROJECT_NAME}
COMMAND echo * > ${CMAKE_BINARY_DIR}/.gitignore
COMMAND echo **/* > ${CMAKE_BINARY_DIR}/.hgignore)

View File

@ -1,4 +1,5 @@
#include "FileColumnView.h"
#include "GetFileType.h"
static void setup_fileicon_item(GtkListItemFactory *factory, GtkListItem *item)
{
@ -103,7 +104,7 @@ static void listview_activated(GtkColumnView *view, guint position, FileWindow *
GtkDirectoryList *list = GTK_DIRECTORY_LIST(file_window_get_column_model(win));
// if the file type is directory, open the directory
if (g_file_info_get_file_type(info) == G_FILE_TYPE_DIRECTORY)
if (check_directory(info))
{
// Get the file and set it to the GtkDirectoryList
GFile *file = G_FILE(g_file_info_get_attribute_object(info, "standard::file"));

View File

@ -1,4 +1,5 @@
#include "FileGridView.h"
#include "GetFileType.h"
static void setup_grid_item(GtkListItemFactory *factory, GtkListItem *item)
{
@ -63,7 +64,7 @@ static void gridview_activate(GtkGridView *view, guint position, FileWindow *win
GtkDirectoryList *list = GTK_DIRECTORY_LIST(file_window_get_grid_model(win));
// if the file type is directory, open the directory
if (g_file_info_get_file_type(info) == G_FILE_TYPE_DIRECTORY)
if (check_directory(info))
{
// Get the file and set it to the GtkDirectoryList
GFile *file = G_FILE(g_file_info_get_attribute_object(info, "standard::file"));

View File

@ -0,0 +1,23 @@
#pragma once
#include <gtk/gtk.h>
#include <cstring>
// Check the whether the selected file is directory
// This is a patch for Microsoft Windows
static inline gboolean check_directory(GFileInfo *info)
{
#ifdef _WIN32
const char *file_type = g_file_info_get_content_type(info);
if(strncmp(file_type, "inode/directory", strlen("inode/directory")) == 0)
{
return TRUE;
}
#else
if(g_file_info_get_file_type(info) == G_FILE_TYPE_DIRECTORY){
return TRUE;
}
#endif
// Not a directory, return FALSE
return FALSE;
}