コード例 #1
0
ファイル: e_scale.c プロジェクト: Deepspeed/moksha
EAPI void
e_scale_update(void)
{
   int dpi;
   char buf[128];

   if (e_config->scale.use_dpi)
     {
	dpi = ecore_x_dpi_get();
	e_scale = (double)dpi / (double)e_config->scale.base_dpi;
	if (e_scale > e_config->scale.max) e_scale = e_config->scale.max;
	else if (e_scale < e_config->scale.min) e_scale = e_config->scale.min;
     }
   else if (e_config->scale.use_custom)
     {
	e_scale = e_config->scale.factor;
	if (e_scale > e_config->scale.max) e_scale = e_config->scale.max;
	else if (e_scale < e_config->scale.min) e_scale = e_config->scale.min;
     }

   edje_scale_set(e_scale);
   snprintf(buf, sizeof(buf), "%1.3f", e_scale);
   e_util_env_set("E_SCALE", buf);
   e_hints_scale_update();
}
コード例 #2
0
ファイル: e_scale.c プロジェクト: tpham3783/enlightenment
E_API void
e_scale_update(void)
{
   char buf[128];

   if (e_config->scale.use_dpi)
     {
#ifndef HAVE_WAYLAND_ONLY
        if (e_comp->comp_type == E_PIXMAP_TYPE_X)
          e_scale = (double)ecore_x_dpi_get() / (double)e_config->scale.base_dpi;
#endif
#ifdef HAVE_WAYLAND
        /* FIXME: This needs to get the DPI from a given output */
        if (e_comp->comp_type == E_PIXMAP_TYPE_WL)
          {
             e_scale = (double)ecore_wl2_output_dpi_get(NULL) /
               (double)e_config->scale.base_dpi;
          }
#endif
        if (e_scale > e_config->scale.max) e_scale = e_config->scale.max;
        else if (e_scale < e_config->scale.min)
          e_scale = e_config->scale.min;
     }
   else if (e_config->scale.use_custom)
     {
        e_scale = e_config->scale.factor;
        if (e_scale > e_config->scale.max) e_scale = e_config->scale.max;
        else if (e_scale < e_config->scale.min)
          e_scale = e_config->scale.min;
     }
   elm_config_scale_set(e_scale);
   elm_config_all_flush();
   edje_scale_set(e_scale);
   snprintf(buf, sizeof(buf), "%1.3f", e_scale);
   e_util_env_set("E_SCALE", buf);
   e_hints_scale_update();
}
コード例 #3
0
ファイル: e_ipc.c プロジェクト: haxworx/Enform
/* externally accessible functions */
EINTERN int
e_ipc_init(void)
{
#ifdef USE_IPC
   char buf[4096], buf2[128], buf3[4096];
   char *tmp, *user, *disp, *base;
   int pid, trynum = 0;

   tmp = getenv("TMPDIR");
   if (!tmp) tmp = "/tmp";
   base = tmp;

   tmp = getenv("XDG_RUNTIME_DIR");
   if (tmp) base = tmp;
   tmp = getenv("SD_USER_SOCKETS_DIR");
   if (tmp) base = tmp;
     
   user = getenv("USER");
   if (!user)
     {
        int uidint;
        
        user = "******";
        uidint = getuid();
        if (uidint >= 0)
          {
             snprintf(buf2, sizeof(buf2), "%i", uidint);
             user = buf2;
          }
     }
   
   disp = getenv("DISPLAY");
   if (!disp) disp = ":0";
   
   e_util_env_set("E_IPC_SOCKET", "");
   
   pid = (int)getpid();
   for (trynum = 0; trynum <= 4096; trynum++)
     {
        struct stat st;
        int id1 = 0;
        
        snprintf(buf, sizeof(buf), "%s/e-%s@%x",
                 base, user, id1);
        mkdir(buf, S_IRWXU);
        if (stat(buf, &st) == 0)
          {
             if ((st.st_uid == getuid()) &&
                  ((st.st_mode & (S_IFDIR | S_IRWXU | S_IRWXG | S_IRWXO)) ==
                      (S_IRWXU | S_IFDIR)))
               {
                  snprintf(buf3, sizeof(buf3), "%s/%s-%i",
                           buf, disp, pid);
                  _e_ipc_server = ecore_ipc_server_add
                    (ECORE_IPC_LOCAL_SYSTEM, buf3, 0, NULL);
                  if (_e_ipc_server) break;
               }
          }
        id1 = rand();
     }
   if (!_e_ipc_server) return 0;

   e_util_env_set("E_IPC_SOCKET", buf3);
   ecore_event_handler_add(ECORE_IPC_EVENT_CLIENT_ADD,
                           _e_ipc_cb_client_add, NULL);
   ecore_event_handler_add(ECORE_IPC_EVENT_CLIENT_DEL,
                           _e_ipc_cb_client_del, NULL);
   ecore_event_handler_add(ECORE_IPC_EVENT_CLIENT_DATA,
                           _e_ipc_cb_client_data, NULL);

   e_ipc_codec_init();
#endif
   return 1;
}
コード例 #4
0
ファイル: e_intl.c プロジェクト: haxworx/Enform
/*
 * TODO
 * - Add error dialogs explaining any errors while setting the locale
 *      * Locale aliases need to be configured
 *      * Locale is invalid
 *      * Message files are not found for this locale, then we have (en_US, POSIX, C)
 * - Add support of compound locales i.e. (en_US;zh_CN;C) ==Defer==
 * - Add Configuration for to-be-set environment variables
 */
EAPI void
e_intl_language_set(const char *lang)
{
   int set_envars;
   int ok;

   set_envars = 1;
   /* NULL lang means set everything back to the original environment
    * defaults
    */
   if (!lang)
     {
        e_util_env_set("LANG", _e_intl_orig_lang);

        if (!lang) lang = getenv("LC_ALL");
        if (!lang) lang = getenv("LANG");

        set_envars = 0;
     }

   E_FREE(_e_intl_language_alias);
   _e_intl_language_alias = _e_intl_locale_alias_get(lang);
   E_FREE(_e_intl_language);

   if (lang)
     _e_intl_language = strdup(lang);
   else
     _e_intl_language = NULL;

   ok = 1;
   if (strcmp(_e_intl_language_alias, "C"))
     {
        ok = _e_intl_locale_validate(_e_intl_language_alias);
        if (!ok)
          {
             char *p, *new_lang;

             new_lang = _e_intl_language_alias;
             p = strchr(new_lang, '.');
             if (p) *p = 0;
             _e_intl_language_alias = strdup(new_lang);
             E_FREE(new_lang);
             ok = _e_intl_locale_validate(_e_intl_language_alias);
          }
     }
   if (!ok)
     {
        fprintf(stderr, "The locale '%s' cannot be found on your "
                        "system. Please install this locale or try "
                        "something else.", _e_intl_language_alias);
        return;
     }
   /* Only set env vars is a non NULL locale was passed */
   if (set_envars)
     {
        e_util_env_set("LANG", lang);
        /* Unset LANGUAGE, apparently causes issues if set */
        e_util_env_set("LANGUAGE", NULL);
        efreet_lang_reset();
        setlocale(LC_ALL, lang);
     }
   else
     {
        setlocale(LC_ALL, "");
     }

   if (_e_intl_language)
     {
        char *locale_path;

        locale_path = _e_intl_language_path_find(_e_intl_language_alias);
        if (!locale_path)
          {
             E_Locale_Parts *locale_parts;

             locale_parts = e_intl_locale_parts_get(_e_intl_language_alias);

             /* If locale is C or some form of en don't report an error */
             if ((!locale_parts) &&
                 (strcmp(_e_intl_language_alias, "C")))
               {
                  fprintf(stderr,
                          "An error occurred setting your locale. \n\n"

                          "The locale you have chosen '%s' appears to \n"
                          "be an alias, however, it can not be resloved.\n"
                          "Please make sure you have a 'locale.alias' \n"
                          "file in your 'messages' path which can resolve\n"
                          "this alias.\n\n"

                          "Enform will not be translated.\n",
                          _e_intl_language_alias);
               }
             else if ((locale_parts) && (locale_parts->lang) &&
                      (strcmp(locale_parts->lang, "en")))
               {
                  fprintf(stderr,
                          "An error occurred setting your locale. \n\n"

                          "The translation files for the locale you \n"
                          "have chosen (%s) cannot be found in your \n"
                          "'messages' path. \n\n"

                          "Enform will not be translated.\n",
                          _e_intl_language_alias);
               }
             e_intl_locale_parts_free(locale_parts);
          }
        else
          {
#ifdef HAVE_GETTEXT
             bindtextdomain(PACKAGE, locale_path);
             textdomain(PACKAGE);
             bind_textdomain_codeset(PACKAGE, "UTF-8");
#endif
             free(locale_path);
          }
     }
}
コード例 #5
0
ファイル: e_alert.c プロジェクト: amitesh-singh/Enlightenment
EAPI void 
e_alert_show(int sig) 
{
   char *args[4];
   pid_t pid;

#define E_ALERT_EXE "/enlightenment/utils/enlightenment_alert"

   args[0] = alloca(strlen(e_prefix_lib_get()) + strlen(E_ALERT_EXE) + 1);
   strcpy(args[0], e_prefix_lib_get());
   strcat(args[0], E_ALERT_EXE);

   args[1] = alloca(10);
   snprintf(args[1], 10, "%d", sig);

   args[2] = alloca(21);
   snprintf(args[2], 21, "%lu", (long unsigned int)getpid());

   args[3] = alloca(21);
   snprintf(args[3], 21, "%lu", e_alert_composite_win);

   pid = fork();
   if (pid < -1)
     goto restart_e;

   if (pid == 0)
     {
        /* The child process */
        execvp(args[0], args);
     }
   else
     {
        /* The parent process */
        pid_t ret;
        int status = 0;

        do
          {
             ret = waitpid(pid, &status, 0);
             if (errno == ECHILD)
               break ;
          }
        while (ret != pid);

        if (status == 0)
          goto restart_e;

        if (!WIFEXITED(status))
          goto restart_e;

        if (WEXITSTATUS(status) == 1)
          goto restart_e;

        exit(-11);
     }

 restart_e:
   if (getenv("E_START_MTRACK"))
     e_util_env_set("MTRACK", "track");
   ecore_app_restart();
}
コード例 #6
0
ファイル: e_ipc.c プロジェクト: amitesh-singh/Enlightenment
/* externally accessible functions */
EINTERN int
e_ipc_init(void)
{
#ifdef USE_IPC
   char buf[1024];
   char *tmp, *user, *disp;
   int pid;

   tmp = getenv("TMPDIR");
   if (!tmp) tmp = "/tmp";
   user = getenv("USER");
   if (!user) user = "******";
   disp = getenv("DISPLAY");
   if (!disp) disp = ":0";
   pid = (int)getpid();
   snprintf(buf, sizeof(buf), "%s/enlightenment-%s", tmp, user);
   if (mkdir(buf, S_IRWXU) == 0)
     {
     }
   else
     {
        struct stat st;

        if (stat(buf, &st) == 0)
          {
             if ((st.st_uid == getuid()) &&
                 ((st.st_mode & (S_IFDIR | S_IRWXU | S_IRWXG | S_IRWXO)) ==
                  (S_IRWXU | S_IFDIR)))
               {
               }
             else
               {
                  e_error_message_show(_("Possible IPC Hack Attempt. The IPC socket\n"
                                         "directory already exists BUT has permissions\n"
                                         "that are too leanient (must only be readable\n" "and writable by the owner, and nobody else)\n"
                                                                                          "or is not owned by you. Please check:\n"
                                                                                          "%s/enlightenment-%s\n"), tmp, user);
                  return 0;
               }
          }
        else
          {
             e_error_message_show(_("The IPC socket directory cannot be created or\n"
                                    "examined.\n"
                                    "Please check:\n"
                                    "%s/enlightenment-%s\n"),
                                  tmp, user);
             return 0;
          }
     }
   snprintf(buf, sizeof(buf), "%s/enlightenment-%s/disp-%s-%i", 
            tmp, user, disp, pid);
   _e_ipc_server = ecore_ipc_server_add(ECORE_IPC_LOCAL_SYSTEM, buf, 0, NULL);
   e_util_env_set("E_IPC_SOCKET", "");
   if (!_e_ipc_server) return 0;
   e_util_env_set("E_IPC_SOCKET", buf);
   printf("INFO: E_IPC_SOCKET=%s\n", buf);
   ecore_event_handler_add(ECORE_IPC_EVENT_CLIENT_ADD, 
                           _e_ipc_cb_client_add, NULL);
   ecore_event_handler_add(ECORE_IPC_EVENT_CLIENT_DEL, 
                           _e_ipc_cb_client_del, NULL);
   ecore_event_handler_add(ECORE_IPC_EVENT_CLIENT_DATA, 
                           _e_ipc_cb_client_data, NULL);

   e_ipc_codec_init();
#endif
   return 1;
}