--- states_views.inc.orig	2008-05-28 00:12:55.000000000 +0200
+++ states_views.inc	2008-05-28 00:35:31.000000000 +0200
@@ -113,3 +113,43 @@
   $machines = states_get_machines('labels');
   return $machines[$value];
 }
+
+function states_views_arguments() {
+  $arguments = array(
+    'statename' => array(
+      'name' => t('States: State name for specified machine'),
+      'handler' => 'views_handler_argument_statename',
+      'help' => t('The argument will filter for the indicated state'),
+      'option' => array(
+        '#type' => 'select',
+        '#options' => array_keys(states_get_machines('all')),
+      ),
+    ),
+  );
+  return $arguments;
+}
+
+function views_handler_argument_statename($op, &$query, $argtype, $arg = null) {
+  switch($op) {
+    case 'summary':
+      $query->ensure_table('node_state');
+      $query->add_field('machine','node_state');
+      $query->add_field('state','node_state');
+      $fieldinfo['field'] = "node_state.state";
+      return $fieldinfo;
+      break;
+    case 'sort':
+      $query->add_orderby('node_state', 'machine', $argtype);
+      $query->add_orderby('node_state', 'state', $argtype);
+      break;
+    case 'filter':
+      $query->ensure_table('node_state');
+      $where = db_escape_string($arg);
+      $query->add_where("node_state.state = '%s'", $arg);
+      break;
+    case 'link':
+      return l($query->name,$arg."/".$query->name);
+    case 'title':
+      return $query;
+  }
+}
