Ticket #10064: 0001-CannaIM-copy-data-files-to-user-setting-directory.patch

File 0001-CannaIM-copy-data-files-to-user-setting-directory.patch, 4.1 KB (added by mt, 10 years ago)
  • src/add-ons/input_server/methods/canna/CannaLooper.cpp

    From c2e7cb6a9d5f8636846f320007ee60564d5afa52 Mon Sep 17 00:00:00 2001
    From: Murai Takashi <tmurai01@gmail.com>
    Date: Sat, 26 Oct 2013 06:32:36 +0900
    Subject: [PATCH 01/23] CannaIM:copy data files to user setting directory.
    
    ---
     .../input_server/methods/canna/CannaLooper.cpp     |   68 +++++++++++++++++---
     .../input_server/methods/canna/CannaLooper.h       |    1 +
     src/add-ons/input_server/methods/canna/Jamfile     |    2 +-
     3 files changed, 62 insertions(+), 9 deletions(-)
    
    diff --git a/src/add-ons/input_server/methods/canna/CannaLooper.cpp b/src/add-ons/input_server/methods/canna/CannaLooper.cpp
    index 4fbfa50..bd4636f 100644
    a b  
    1818#include <Menu.h>
    1919#include <MenuItem.h>
    2020#include <Messenger.h>
     21#include <Entry.h>
    2122#include <Path.h>
    2223#include <Screen.h>
     24#include <CopyEngine.h>
    2325
    2426#include "CannaCommon.h"
    2527#include "CannaMethod.h"
    CannaLooper::CannaLooper(CannaMethod* method)  
    4446    fMenu->AddItem(new BMenuItem("Reload Init file",
    4547        new BMessage(RELOAD_INIT_FILE)));
    4648
     49    font_family family;
     50    font_style style;
     51    strcpy(family, "VL PGothic");
     52    strcpy(style, "regular");
     53
     54    fKouhoFont.SetFamilyAndStyle(family, style);
     55    fKouhoFont.SetSize(12);
     56
    4757    if (gSettings.convert_arrowkey) {
    4858        BMenuItem* item = fMenu->FindItem(ARROW_KEYS_FLIPPED);
    4959        item->SetMarked(true);
    CannaLooper::Quit()  
    95105
    96106
    97107status_t
     108CannaLooper::copyData(const char* dstPath)
     109{
     110    // We should copy data from /boot/system/Data or /boot/home/config/Data
     111    // so that user can drop canna package either to /boot/system/pacages
     112    // or to /boot/home/config/packages.
     113
     114    bool found = false;
     115    status_t status;
     116    BPath srcPath;
     117    BEntry ent;
     118    directory_which which[] = {
     119        B_USER_DATA_DIRECTORY,
     120        B_SYSTEM_DATA_DIRECTORY
     121    };
     122
     123    for(unsigned int i = 0; i < sizeof(which) / sizeof(directory_which); i++) {
     124        status = find_directory(which[i], &srcPath);
     125        if (status != B_OK)
     126            continue;
     127
     128        srcPath.Append("Canna");
     129        ent.SetTo(srcPath.Path());
     130        if (ent.Exists()) {
     131            found = true;
     132            break;
     133        }
     134    }
     135
     136    if (!found) {
     137        return B_ERROR;
     138    }
     139
     140    BCopyEngine CopyEngine(BCopyEngine::COPY_RECURSIVELY);
     141    status = CopyEngine.CopyEntry(srcPath.Path(), dstPath);
     142    if (status != B_OK)
     143        return B_ERROR;
     144
     145    // TODO: if Haiku goes multi-user, we need SetOwner() to data files
     146    // and directory.
     147
     148    return B_OK;
     149}
     150
     151
     152status_t
    98153CannaLooper::ReadSettings(char* basePath)
    99154{
    100155    BPath path;
    101     status_t status = find_directory(B_SYSTEM_DATA_DIRECTORY, &path);
     156    status_t status = find_directory(B_USER_SETTINGS_DIRECTORY, &path);
    102157    if (status != B_OK)
    103158        return status;
    104159
    CannaLooper::ReadSettings(char* basePath)  
    107162    strlcpy(basePath, path.Path(), B_PATH_NAME_LENGTH);
    108163    strlcat(basePath, "/", B_PATH_NAME_LENGTH);
    109164
    110     font_family family;
    111     font_style style;
    112     strcpy(family, "VL PGothic");
    113     strcpy(style, "regular");
    114 
    115     fKouhoFont.SetFamilyAndStyle(family, style);
    116     fKouhoFont.SetSize(12);
     165    BEntry ent(path.Path());
     166    if (!ent.Exists()) {
     167        return copyData(path.Path());
     168    }
    117169
    118170    return B_OK;
    119171}
  • src/add-ons/input_server/methods/canna/CannaLooper.h

    diff --git a/src/add-ons/input_server/methods/canna/CannaLooper.h b/src/add-ons/input_server/methods/canna/CannaLooper.h
    index 60e93a3..f3f7edb 100644
    a b public:  
    3838            void            SendInputStarted();
    3939
    4040private:
     41            status_t        copyData(const char* dstPath);
    4142            void            _HandleKeyDown(BMessage* msg);
    4243            void            _HandleLocationReply(BMessage* msg);
    4344            void            _HandleMethodActivated(bool active);
  • src/add-ons/input_server/methods/canna/Jamfile

    diff --git a/src/add-ons/input_server/methods/canna/Jamfile b/src/add-ons/input_server/methods/canna/Jamfile
    index 59c7050..211008a 100644
    a b SubDir HAIKU_TOP src add-ons input_server methods canna ;  
    22
    33SetSubDirSupportedPlatformsBeOSCompatible ;
    44
    5 UsePrivateHeaders interface ;
     5UsePrivateHeaders interface storage ;
    66
    77SubDirSysHdrs $(SUBDIR) ;
    88SubDirHdrs [ FDirName $(SUBDIR) canna ] ;