Elm entry: Fixed 'Paste' to only show if there clipboard isn't empty.
[framework/uifw/elementary.git] / src / lib / elm_cnp_helper.c
index 7c87a89..96b3b07 100644 (file)
@@ -168,14 +168,14 @@ static void entry_insert_filter(Evas_Object* entry, char* str);
 /* Optimisation: Turn this into a 256 byte table:
  *     then can lookup in one index, not N checks */
 static const Escape escapes[] = {
-       { "<br>",   '\n' },
-       { "<ps>",   '\n' },
-       { "<\t>",   '\t' },
-       { "gt;",    '>'  },
-       { "lt;",    '<'  },
-       { "amp;",   '&'  },
-       { "quot;",  '\'' },
-       { "dquot;", '"'  }
+  { "<br>",   '\n' },
+  { "<ps>",   '\n' },
+  { "<\t>",   '\t' },
+  { "gt;",    '>'  },
+  { "lt;",    '<'  },
+  { "amp;",   '&'  },
+  { "quot;",  '\'' },
+  { "dquot;", '"'  }
 };
 #define N_ESCAPES ((int)(sizeof(escapes) / sizeof(escapes[0])))
 
@@ -823,8 +823,7 @@ _set_EFL_item_data(PItemTagData data, const char *tag_str)
         if (path)
           {
              char *modify = malloc(sizeof(char) * (strlen(value) + 1));
-             strncpy(modify, "file://", 7);
-             modify[7] = '\0';
+             strncpy(modify, "file://", 8);
              path += 7;
              while (path[1] && path[0] && path[1] == '/' && path[0] == '/')
                {
@@ -905,8 +904,7 @@ _set_HTML_img_data(PItemTagData data, const char *tag_str)
         if (path)
           {
              char *modify = malloc(sizeof(char) * (strlen(value) + 1));
-             strncpy(modify, "file://", 7);
-             modify[7] = '\0';
+             strncpy(modify, "file://", 8);
              path += 7;
              while (path[1] && path[0] && path[1] == '/' && path[0] == '/')
                {
@@ -1183,6 +1181,16 @@ _convert_to_edje(Eina_List* nodes)
 }
 
 Eina_Bool
+elm_selection_selection_has_owner(void)
+{
+#ifdef HAVE_ELEMENTARY_X
+   return !!ecore_x_selection_owner_get(clipboard_atom);
+#else
+   return EINA_FALSE;
+#endif
+}
+
+Eina_Bool
 elm_selection_set(Elm_Sel_Type selection, Evas_Object *widget, Elm_Sel_Format format, const char *selbuf)
 {
 #ifdef HAVE_ELEMENTARY_X
@@ -1463,11 +1471,13 @@ notify_handler_targets(Cnp_Selection *sel, Ecore_X_Event_Selection_Notify *notif
           {
              if ((atoms[j].atom == atomlist[i]) && (atoms[j].notify))
                {
-/*                  if ((j == CNP_ATOM_text_uri) ||
+#if 0
+                  if ((j == CNP_ATOM_text_uri) ||
                       (j == CNP_ATOM_text_urilist))
                     {
                       if(!is_uri_type_data(sel, notify)) continue;
-                    }*/
+                    }
+#endif
                   cnp_debug("Atom %s matches\n",atoms[j].name);
                   goto done;
                }
@@ -1939,14 +1949,20 @@ edje_converter(char *target __UNUSED__, void *data, int size __UNUSED__, void **
         if (edje)
           *data_ret = edje;
         else
-          *data_ret = strdup(sel->selbuf);
+           if (sel->selbuf)
+             *data_ret = strdup(sel->selbuf);
+           else
+             *data_ret = strdup("");
      }
    if (size_ret)
      {
         if (edje)
           *size_ret = strlen(edje);
         else
-          *size_ret = strlen(sel->selbuf);
+          if (sel->selbuf)
+            *size_ret = strlen(sel->selbuf);
+          else
+            *size_ret = 0;
      }
 
    return EINA_TRUE;
@@ -2006,7 +2022,10 @@ html_converter(char *target __UNUSED__, void *data, int size __UNUSED__, void **
         if (html)
           *data_ret = html;
         else
-          *data_ret = strdup(sel->selbuf);
+          if (sel->selbuf)
+            *data_ret = strdup(sel->selbuf);
+          else
+            *data_ret = strdup("");
      }
 
    if (size_ret)
@@ -2014,7 +2033,10 @@ html_converter(char *target __UNUSED__, void *data, int size __UNUSED__, void **
         if (html)
           *size_ret = strlen(html);
         else
-          *size_ret = strlen(sel->selbuf);
+          if (sel->selbuf)
+            *size_ret = strlen(sel->selbuf);
+          else
+            *size_ret = 0;
      }
    if (convert_target != sel->selbuf)
      free(convert_target);
@@ -2700,7 +2722,6 @@ elm_cnp_tempfile_create(int size)
 
    tmppath = getenv("TMP");
    if (!tmppath) tmppath = P_tmpdir;
-   if (!tmppath) tmppath = "/tmp";
    len = snprintf(NULL, 0, "%s/%sXXXXXX", tmppath, "elmcnpitem-");
    if (len < 0)
      {